那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用JDK截斷一個字符串

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-08 15:43 ? 次閱讀

在本文中,我們將學習在Java中把一個String截斷到所需的字符數的集中方法。

首先,我們將探索使用JDK本身來實現這一目標的方法。然后,我們將研究如何使用一些流行的第三方庫來實現這一目標。

使用JDK截斷一個字符串

Java提供了許多方便的方法來截斷一個 String 。讓我們來看看。

使用 String 的 substring() 方法

String 類有一個方便的方法,叫做 substring ,正如其名稱所示 , substring() 返回指定索引之間的 String 部分。

讓我們來看看它的運行情況。

static String usingSubstringMethod(String text, int length) {
    if (text.length() <= length) {
        return text;
    } else {
        return text.substring(0, length);
    }
}

在上面的例子中,如果指定的 length 大于 text 的長度,我們返回 text 本身。這是因為 傳遞給 substring() 的 length 大于 String 的字符數會導致 IndexOutOfBoundsException

否則,我們將返回從索引0開始并延伸到--但不包括--索引 length 的字符的子串。

讓我們用一個測試案例來確認這一點。

static final String TEXT = "Welcome to  javanorth.cn";

@Test
public void givenStringAndLength_whenUsingSubstringMethod_thenTrim() {

    assertEquals(TrimStringOnLength.usingSubstringMethod(TEXT, 10), "Welcome to");
}

正如我們所看到的, 的起始索引是包容的,結束索引是排他的 。因此, 索引 length 處的字符將不包括在返回的子串中。

使用 String 的 split() 方法

另一種截斷 String 的方法是使用 split() 方法,它使用正則表達式將 String 分割成若干部分。

這里我們將使用一個叫做 positive lookbehind 的正則表達式特征來匹配從 String 開始的指定數量的字符。

static String usingSplitMethod(String text, int length) {

    String[] results = text.split("(?<=G.{" + length + "})");

    return results[0];
}

results 的第一個元素將是我們截斷的 String ,如果 length 長于 text ,則是原始的 String 。

讓我們測試一下我們的方法。

@Test
public void givenStringAndLength_whenUsingSplitMethod_thenTrim() {

    assertEquals(TrimStringOnLength.usingSplitMethod(TEXT, 13), "Welcome to ba");
}

使用 Pattern 類

同樣, 我們可以使用 Pattern 類來編譯一個正則表達式,該表達式可以匹配 String 的開頭,直至指定的字符數 。

例如,讓我們使用 {1," + length + "}. 這個正則表達式至少匹配一個,最多匹配 length 個字符。

static String usingPattern(String text, int length) {

    Optional< String > result = Pattern.compile(".{1," + length + "}")
      .matcher(text)
      .results()
      .map(MatchResult::group)
      .findFirst();

    return result.isPresent() ? result.get() : EMPTY;

}

正如我們在上面看到的,在將我們的正則表達式編譯成 Pattern 后,我們可以使用 Pattern的 matcher() 方法來根據該正則表達式解釋我們的 String 。然后我們就可以將結果分組,并返回第一個結果,也就是我們截斷的 String 。

現在讓我們添加一個測試案例來驗證我們的代碼是否如預期那樣工作。

@Test
public void givenStringAndLength_whenUsingPattern_thenTrim() {

    assertEquals(TrimStringOnLength.usingPattern(TEXT, 19), "Welcome to  javanorth");
}

使用 CharSequence 的 codePoints() 方法

Java 9提供了一個 codePoints() 方法來將一個 String 轉換為一個碼點值流。

讓我們看看如何使用這個方法與 Stream API相結合來截斷一個字符串。

static String usingCodePointsMethod(String text, int length) {

    return text.codePoints()
      .limit(length)
      .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
      .toString();
}

在這里,我們使用 limit() 方法來限制 Stream 的長度 。然后我們使用 StringBuilder 來建立我們的截斷字符串。

接下來,讓我們驗證一下我們的方法是否有效。

@Test
public void givenStringAndLength_whenUsingCodePointsMethod_thenTrim() {
    assertEquals(TrimStringOnLength.usingCodePointsMethod(TEXT, 6), "Welcom");
}

Apache Commons 庫

Apache Commons Lang 庫包括一個 StringUtils 類,用于操作 String。

首先,讓我們把Apache Commons dependency添加到我們的 pom.xml 。

< dependency >
    < groupId >org.apache.commons< /groupId >
    < artifactId >commons-lang3< /artifactId >
    < version >3.12.0< /version >
< /dependency >

使用 StringUtils的left() 方法

StringUtils 有一個有用的 靜態 方法叫 left() 。 StringUtils.left() 以一種安全的方式返回 String 最左邊的指定字符數: 。

static String usingLeftMethod(String text, int length) {

    return StringUtils.left(text, length);
}

使用 StringUtils 的 truncate() 方法

另外,我們可以使用 StringUtils.truncate() 來達到同樣的目的。

public static String usingTruncateMethod(String text, int length) {
    return StringUtils.truncate(text, length);
}

Guava庫

除了使用核心Java方法和Apache Commons庫來截斷一個 String 之外,我們還可以使用 Guava。讓我們首先把Guava的 dependency 添加到我們的 pom.xml 文件中。

< dependency >
    < groupId >com.google.guava< /groupId >
    < artifactId >guava< /artifactId >
    < version >31.0.1-jre< /version >
< /dependency >

現在我們可以使用Guava的 Splitter 類來截斷我們的 String 。

static String usingSplitter(String text, int length) {
    Iterable< String > parts = Splitter.fixedLength(length)
      .split(text);
    return parts.iterator()
      .next();
}

我們使用 Splitter.fixedLength() 將我們的 String 分割成多個給定長度的片段。然后,我們返回結果中的第一個元素。

總結

在這篇文章中,我們學習了在Java中把一個 String 截斷為特定數量的字符的各種方法。我們看了一些使用JDK來做這件事的方法。然后,我們使用一些第三方庫來截斷 String 。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 字符串
    +關注

    關注

    1

    文章

    585

    瀏覽量

    20601
  • 代碼
    +關注

    關注

    30

    文章

    4825

    瀏覽量

    69043
  • JDK
    JDK
    +關注

    關注

    0

    文章

    82

    瀏覽量

    16636
  • Split
    +關注

    關注

    0

    文章

    6

    瀏覽量

    5585
收藏 人收藏

    評論

    相關推薦

    請問C語言中如何解析一個字符串

    我是通過WIFI模塊獲取一個字符串,然后現在想要解析出一個字符,想把那個字符轉換成16進制,然后賦值給P0口,
    發表于 10-13 17:59

    labview中已知4個字符串(每個字符串包含一個字符)如何隨機排列?

    labview中已知4個字符串(每個字符串包含一個字符)如何隨機排列?求大神給程框圖。
    發表于 01-22 15:43

    請問使用Mbed庫的串口怎么接收一個字符串?

    getc 只能收一個字節.scanf 需要字符串以換行符結尾.如題,就是非阻塞方式接收一個字符串,感謝回復.STM32里有線路空閑中斷,Mbed里沒用到.
    發表于 03-01 06:17

    如何判斷一個字符串開頭?

    命令以“$Cmd,”開頭,以“,”分隔,以“*”結尾。單片機回復以“$Message,”開頭,以“,”分隔,以“*”結尾。如果錯誤這以“$Message,ERROR,”開頭,以“,”分隔,以“*”結尾。我想問我如何判斷一個字符串開頭,判斷一個字符沒問題,但判斷
    發表于 09-11 22:13

    如何輸出連接的字符串中的第一個字符串

    本帖最后由 疃12345 于 2021-4-19 22:11 編輯 如何輸出第一個字符串?要求單獨輸出第一個字符串,不影響這字符串的連接與輸出,如圖所示,輸出數值0.4869
    發表于 04-19 22:07

    解決STM32口丟失第一個字符

    在使用STM32口時可能會發現問題就是發送字符串時第一個字符缺失情況。解決辦法在發送字符串
    發表于 12-27 19:28 ?10次下載
    解決STM32<b class='flag-5'>串</b>口丟失第<b class='flag-5'>一個字符</b>

    MATLAB(5)--字符串處理

    在MATLAB中,字符串是用單引號括起來的字符序列,是把一個字符串當做一個行向量,這個行向量中,每個元素對應一個字符
    的頭像 發表于 11-14 16:06 ?1673次閱讀
    MATLAB(5)--<b class='flag-5'>字符串</b>處理

    文詳解JavaScript字符串

    JavaScript字符串是原始值。此外,字符串是不可變的。這意味著如果你修改一個字符串,你總是會得到新的
    的頭像 發表于 12-08 16:36 ?1256次閱讀

    如何利用Java判斷一個字符串是否包含某個字符

    如何利用Java通過不同的方法來判斷一個字符串是否包含某個字符。 **2 ****方法** 1. .contains方法
    的頭像 發表于 02-17 15:13 ?1559次閱讀
    如何利用Java判斷<b class='flag-5'>一個字符串</b>是否包含某<b class='flag-5'>個字符</b>

    C語言字符串的引用方式

    在C語言程序中,字符串是存放在字符數組中的。 2. 用字符數組存放一個字符串,可以通過數組名和下標引用字符串中的
    的頭像 發表于 03-10 14:57 ?2002次閱讀

    Python中檢查字符串包含的方法

    Python 有多種處理字符串的方法。今天我們介紹如何檢查一個字符串中是否包含另一個字符串
    的頭像 發表于 05-14 16:02 ?1.6w次閱讀

    代碼字符串分割方法

    我們寫代碼的時候,經常會遇到這樣場景,那就是分割字符串。比如說把一個字符串分成N,或者說按照N個字
    的頭像 發表于 09-25 11:42 ?872次閱讀

    mysql字符串包含某個字符串

    MySQL是種開源的關系型數據庫管理系統,被廣泛用于構建Web應用程序和其他大型數據驅動的應用。在進行MySQL數據庫查詢時,經常需要使用字符串包含操作,即判斷一個字符串是否包含另一個字符串
    的頭像 發表于 11-16 14:52 ?3920次閱讀

    oracle判斷字符串包含某個字符

    字符串操作是任何編程語言中都非常重要的部分,Oracle數據庫作為目前最常用的關系型數據庫之,也提供了豐富的字符串操作函數和方法。在本文中,我們將詳細解析如何在Oracle中判斷
    的頭像 發表于 12-06 09:53 ?1.5w次閱讀

    字符串反轉的實現方式

    在編程中,字符串反轉是基礎而重要的操作,它涉及到將一個字符串中的字符順序顛倒過來。這個操作在多種編程語言中都有不同的實現方式,本文將探討
    的頭像 發表于 01-07 15:27 ?205次閱讀
    大发888娱乐场下载英皇国际| 巴特百家乐官网的玩法技巧和规则| 百家乐官网烫金筹码| 江城| 新葡京| 在线赌博平台| 沈阳市| 百家乐官网视频游戏盗号| 百家乐官网赌博机原理| 百家乐官网筹码防伪定制| 网络百家乐官网内幕| 公海百家乐官网的玩法技巧和规则 | 金牌百家乐官网的玩法技巧和规则| 同花顺百家乐官网的玩法技巧和规则 | 老牌现金网| 沽源县| 百家乐官网色子玩法| 百家乐官网网络游戏平台| 如何玩百家乐官网的玩法技巧和规则| 做生意发财招财图像| 永利百家乐官网游戏| 百家乐官网博彩策略论坛| 百家乐官网技术辅助软件| 免费百家乐官网过滤工具| 玩网上百家乐的技巧| 威尼斯人娱乐场地址| 波克棋牌斗地主| 汉川市| 重庆百家乐官网团购百嘉乐量贩KTV地址| 百家乐官网骗局视频| 百家乐已破解的书籍| 百家乐看澳门| 德州扑克算牌器| 百家乐官网翻天快播| 火命与金命做生意| 至尊百家乐20| 皇冠网遮天小说| 百家乐官网赌博代理| 百家乐赌场占多大概率| 大发888如何注册送58| 金城百家乐官网玩法平台|