一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用JDK截?cái)嘁粋€(gè)字符串

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-08 15:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在本文中,我們將學(xué)習(xí)在Java中把一個(gè)String截?cái)嗟剿璧淖址麛?shù)的集中方法。

首先,我們將探索使用JDK本身來(lái)實(shí)現(xiàn)這一目標(biāo)的方法。然后,我們將研究如何使用一些流行的第三方庫(kù)來(lái)實(shí)現(xiàn)這一目標(biāo)。

使用JDK截?cái)嘁粋€(gè)字符串

Java提供了許多方便的方法來(lái)截?cái)嘁粋€(gè) String 。讓我們來(lái)看看。

使用 String 的 substring() 方法

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

讓我們來(lái)看看它的運(yùn)行情況。

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

在上面的例子中,如果指定的 length 大于 text 的長(zhǎng)度,我們返回 text 本身。這是因?yàn)?傳遞給 substring() 的 length 大于 String 的字符數(shù)會(huì)導(dǎo)致 IndexOutOfBoundsException 。

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

讓我們用一個(gè)測(cè)試案例來(lái)確認(rèn)這一點(diǎn)。

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

@Test
public void givenStringAndLength_whenUsingSubstringMethod_thenTrim() {

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

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

使用 String 的 split() 方法

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

這里我們將使用一個(gè)叫做 positive lookbehind 的正則表達(dá)式特征來(lái)匹配從 String 開始的指定數(shù)量的字符。

static String usingSplitMethod(String text, int length) {

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

    return results[0];
}

results 的第一個(gè)元素將是我們截?cái)嗟?String ,如果 length 長(zhǎng)于 text ,則是原始的 String 。

讓我們測(cè)試一下我們的方法。

@Test
public void givenStringAndLength_whenUsingSplitMethod_thenTrim() {

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

使用 Pattern 類

同樣, 我們可以使用 Pattern 類來(lái)編譯一個(gè)正則表達(dá)式,該表達(dá)式可以匹配 String 的開頭,直至指定的字符數(shù) 。

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

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;

}

正如我們?cè)谏厦婵吹降?,在將我們的正則表達(dá)式編譯成 Pattern 后,我們可以使用 Pattern的 matcher() 方法來(lái)根據(jù)該正則表達(dá)式解釋我們的 String 。然后我們就可以將結(jié)果分組,并返回第一個(gè)結(jié)果,也就是我們截?cái)嗟?String 。

現(xiàn)在讓我們添加一個(gè)測(cè)試案例來(lái)驗(yàn)證我們的代碼是否如預(yù)期那樣工作。

@Test
public void givenStringAndLength_whenUsingPattern_thenTrim() {

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

使用 CharSequence 的 codePoints() 方法

Java 9提供了一個(gè) codePoints() 方法來(lái)將一個(gè) String 轉(zhuǎn)換為一個(gè)碼點(diǎn)值流。

讓我們看看如何使用這個(gè)方法與 Stream API相結(jié)合來(lái)截?cái)嘁粋€(gè)字符串。

static String usingCodePointsMethod(String text, int length) {

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

在這里,我們使用 limit() 方法來(lái)限制 Stream 的長(zhǎng)度 。然后我們使用 StringBuilder 來(lái)建立我們的截?cái)嘧址?/p>

接下來(lái),讓我們驗(yàn)證一下我們的方法是否有效。

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

Apache Commons 庫(kù)

Apache Commons Lang 庫(kù)包括一個(gè) 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 有一個(gè)有用的 靜態(tài) 方法叫 left() 。 StringUtils.left() 以一種安全的方式返回 String 最左邊的指定字符數(shù): 。

static String usingLeftMethod(String text, int length) {

    return StringUtils.left(text, length);
}

使用 StringUtils 的 truncate() 方法

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

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

Guava庫(kù)

除了使用核心Java方法和Apache Commons庫(kù)來(lái)截?cái)嘁粋€(gè) String 之外,我們還可以使用 Guava。讓我們首先把Guava的 dependency 添加到我們的 pom.xml 文件中。

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

現(xiàn)在我們可以使用Guava的 Splitter 類來(lái)截?cái)辔覀兊?String 。

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

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

總結(jié)

在這篇文章中,我們學(xué)習(xí)了在Java中把一個(gè) String 截?cái)酁樘囟〝?shù)量的字符的各種方法。我們看了一些使用JDK來(lái)做這件事的方法。然后,我們使用一些第三方庫(kù)來(lái)截?cái)?String 。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    590

    瀏覽量

    22313
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70794
  • JDK
    JDK
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    16897
  • Split
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    5675
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    請(qǐng)問C語(yǔ)言中如何解析一個(gè)字符串

    我是通過WIFI模塊獲取一個(gè)字符串,然后現(xiàn)在想要解析出一個(gè)字符,想把那個(gè)字符轉(zhuǎn)換成16進(jìn)制,然后賦值給P0口,
    發(fā)表于 10-13 17:59

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

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

    請(qǐng)問使用Mbed庫(kù)的串口怎么接收一個(gè)字符串?

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

    如何判斷一個(gè)字符串開頭?

    命令以“$Cmd,”開頭,以“,”分隔,以“*”結(jié)尾。單片機(jī)回復(fù)以“$Message,”開頭,以“,”分隔,以“*”結(jié)尾。如果錯(cuò)誤這以“$Message,ERROR,”開頭,以“,”分隔,以“*”結(jié)尾。我想問我如何判斷一個(gè)字符串開頭,判斷一個(gè)字符沒問題,但判斷
    發(fā)表于 09-11 22:13

    如何輸出連接的字符串中的第一個(gè)字符串?

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

    解決STM32口丟失第一個(gè)字符

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

    MATLAB(5)--字符串處理

    在MATLAB中,字符串是用單引號(hào)括起來(lái)的字符序列,是把一個(gè)字符串當(dāng)做一個(gè)行向量,這個(gè)行向量中,每個(gè)元素對(duì)應(yīng)一個(gè)字符。
    的頭像 發(fā)表于 11-14 16:06 ?2214次閱讀
    MATLAB(5)--<b class='flag-5'>字符串</b>處理

    文詳解JavaScript字符串

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

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

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

    C語(yǔ)言字符串的引用方式

    在C語(yǔ)言程序中,字符串是存放在字符數(shù)組中的。 2. 用字符數(shù)組存放一個(gè)字符串,可以通過數(shù)組名和下標(biāo)引用字符串中的
    的頭像 發(fā)表于 03-10 14:57 ?2334次閱讀

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

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

    代碼字符串分割方法

    我們寫代碼的時(shí)候,經(jīng)常會(huì)遇到這樣個(gè)場(chǎng)景,那就是分割字符串。比如說(shuō)把一個(gè)字符串分成N個(gè),或者說(shuō)按照N個(gè)字
    的頭像 發(fā)表于 09-25 11:42 ?1259次閱讀

    mysql字符串包含某個(gè)字符串

    MySQL是種開源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),被廣泛用于構(gòu)建Web應(yīng)用程序和其他大型數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用。在進(jìn)行MySQL數(shù)據(jù)庫(kù)查詢時(shí),經(jīng)常需要使用字符串包含操作,即判斷一個(gè)字符串是否包含另一個(gè)字符串
    的頭像 發(fā)表于 11-16 14:52 ?4528次閱讀

    oracle判斷字符串包含某個(gè)字符

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

    字符串反轉(zhuǎn)的實(shí)現(xiàn)方式

    在編程中,字符串反轉(zhuǎn)是個(gè)基礎(chǔ)而重要的操作,它涉及到將一個(gè)字符串中的字符順序顛倒過來(lái)。這個(gè)操作在多種編程語(yǔ)言中都有不同的實(shí)現(xiàn)方式,本文將探討
    的頭像 發(fā)表于 01-07 15:27 ?829次閱讀