欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中字符串分割常見(jiàn)的方法總結(jié)大全

 更新時(shí)間:2025年07月17日 08:26:02   作者:1010n111  
這篇文章主要介紹了Java中字符串分割方法的相關(guān)資料,Java字符串分割方法涵蓋split()、正則表達(dá)式、Stream及第三方庫(kù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

技術(shù)背景

在Java編程中,經(jīng)常需要對(duì)字符串進(jìn)行分割操作,例如將一個(gè)包含多個(gè)信息的字符串按照特定的分隔符拆分成多個(gè)子字符串。常見(jiàn)的應(yīng)用場(chǎng)景包括解析CSV文件、處理網(wǎng)絡(luò)請(qǐng)求參數(shù)等。

實(shí)現(xiàn)步驟

1. 使用String#split()方法

String#split()方法是最常用的字符串分割方法,它接受一個(gè)正則表達(dá)式作為分隔符。

String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556

2. 處理特殊字符分隔符

由于split()方法的參數(shù)是正則表達(dá)式,對(duì)于一些特殊字符(如.、|等),需要進(jìn)行轉(zhuǎn)義。

String string = "004.034556";
// 使用轉(zhuǎn)義字符
String[] parts1 = string.split("\\."); 
// 使用字符類(lèi)
String[] parts2 = string.split("[.]"); 
// 使用Pattern.quote()方法
String[] parts3 = string.split(Pattern.quote(".")); 

3. 檢查字符串是否包含分隔符

在分割之前,可以使用String#contains()方法檢查字符串是否包含特定的分隔符。

String string = "004-034556";
if (string.contains("-")) {
    String[] parts = string.split("-");
} else {
    throw new IllegalArgumentException("String " + string + " does not contain -");
}

4. 保留分割字符

可以使用正則表達(dá)式的正向前瞻和正向后顧來(lái)保留分割字符。

// 分割字符在左邊
String string1 = "004-034556";
String[] parts1 = string1.split("(?<=-)"); 
String part11 = parts1[0]; // 004-
String part12 = parts1[1]; // 034556

// 分割字符在右邊
String string2 = "004-034556";
String[] parts2 = string2.split("(?=-)"); 
String part21 = parts2[0]; // 004
String part22 = parts2[1]; // -034556

5. 限制分割結(jié)果數(shù)量

可以通過(guò)split()方法的第二個(gè)參數(shù)限制分割結(jié)果的數(shù)量。

String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42

6. 使用正則表達(dá)式捕獲組

可以使用正則表達(dá)式的捕獲組來(lái)實(shí)現(xiàn)更復(fù)雜的分割和約束。

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class SplitExample {
    private static Pattern twopart = Pattern.compile("(\\d+)-(\\d+)");

    public static void checkString(String s) {
        Matcher m = twopart.matcher(s);
        if (m.matches()) {
            System.out.println(s + " matches; first part is " + m.group(1) +
                               ", second part is " + m.group(2) + ".");
        } else {
            System.out.println(s + " does not match.");
        }
    }

    public static void main(String[] args) {
        checkString("123-4567");
        checkString("foo-bar");
        checkString("123-");
        checkString("-4567");
        checkString("123-4567-890");
    }
}

7. Java 8 Stream方式

在Java 8及以上版本中,可以使用Pattern.compile().splitAsStream()方法將分割結(jié)果轉(zhuǎn)換為流。

import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

List<String> stringList = Pattern.compile("-")
        .splitAsStream("004-034556")
        .collect(Collectors.toList());
stringList.forEach(s -> System.out.println(s));

8. 使用StringTokenizer類(lèi)(不推薦)

StringTokenizer是一個(gè)遺留類(lèi),不建議在新代碼中使用,但它仍然可以用于字符串分割。

import java.util.StringTokenizer;

StringTokenizer strTkn = new StringTokenizer("004-034556", "-");
while (strTkn.hasMoreTokens()) {
    System.out.println(strTkn.nextToken());
}

9. 使用Apache Commons Lang庫(kù)

Apache Commons Lang庫(kù)提供了StringUtils.split()方法,使用起來(lái)更加方便。

import org.apache.commons.lang.StringUtils;

String str = "004-034556";
String[] split = StringUtils.split(str, "-");

10. 使用Google Guava庫(kù)

Google Guava庫(kù)的Splitter類(lèi)允許鏈?zhǔn)秸{(diào)用不同的字符串操作。

import com.google.common.base.Splitter;
import java.util.List;

String string = "004-034556";
List<String> result = Splitter.on('-')
        .trimResults()
        .omitEmptyStrings()
        .splitToList(string);

核心代碼

以下是一個(gè)綜合示例,展示了不同的字符串分割方法:

import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.apache.commons.lang.StringUtils;
import com.google.common.base.Splitter;

public class StringSplitExample {
    public static void main(String[] args) {
        String string = "004-034556";

        // 使用String#split()方法
        String[] parts1 = string.split("-");
        System.out.println(Arrays.toString(parts1));

        // 使用Java 8 Stream方式
        List<String> parts2 = Pattern.compile("-")
                .splitAsStream(string)
                .collect(Collectors.toList());
        System.out.println(parts2);

        // 使用Apache Commons Lang庫(kù)
        String[] parts3 = StringUtils.split(string, "-");
        System.out.println(Arrays.toString(parts3));

        // 使用Google Guava庫(kù)
        List<String> parts4 = Splitter.on('-')
                .trimResults()
                .omitEmptyStrings()
                .splitToList(string);
        System.out.println(parts4);
    }
}

最佳實(shí)踐

  • 性能考慮:如果分割的字符串?dāng)?shù)量較多,或者需要頻繁進(jìn)行分割操作,建議使用Pattern.compile()方法預(yù)編譯正則表達(dá)式,以提高性能。
  • 異常處理:在使用split()方法時(shí),要注意數(shù)組越界異常,特別是在不確定分割結(jié)果數(shù)量的情況下。
  • 代碼可讀性:選擇合適的分割方法,使代碼更易讀和維護(hù)。例如,對(duì)于簡(jiǎn)單的單字符分隔符,使用String#split()方法即可;對(duì)于復(fù)雜的分割需求,可以考慮使用正則表達(dá)式捕獲組。

常見(jiàn)問(wèn)題

1. 特殊字符分隔符問(wèn)題

split()方法的參數(shù)是正則表達(dá)式,對(duì)于一些特殊字符(如.、|等),需要進(jìn)行轉(zhuǎn)義。否則,這些字符會(huì)被解釋為正則表達(dá)式的元字符,導(dǎo)致分割結(jié)果不符合預(yù)期。

2. 空字符串問(wèn)題

在某些情況下,分割結(jié)果可能包含空字符串。可以使用trimResults()omitEmptyStrings()方法來(lái)處理空字符串。

3. StringTokenizer類(lèi)的使用問(wèn)題

StringTokenizer是一個(gè)遺留類(lèi),不建議在新代碼中使用。它的功能相對(duì)有限,而且不支持正則表達(dá)式。

總結(jié)

到此這篇關(guān)于Java中字符串分割常見(jiàn)方法的文章就介紹到這了,更多相關(guān)Java字符串分割內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JVM詳解之匯編角度理解本地變量的生命周期

    JVM詳解之匯編角度理解本地變量的生命周期

    這篇文章主要介紹了JVM詳解之匯編角度理解本地變量的生命周期,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java 中This用法的實(shí)例詳解

    Java 中This用法的實(shí)例詳解

    這篇文章主要介紹了 Java 中This用法的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能理解掌握this關(guān)鍵字的使用方法,需要的朋友可以參考下
    2017-09-09
  • swagger文檔增強(qiáng)工具knife4j使用圖文詳解

    swagger文檔增強(qiáng)工具knife4j使用圖文詳解

    這篇文章主要介紹了swagger文檔增強(qiáng)工具knife4j使用詳解,想要使用knife4j非常簡(jiǎn)單,只要在Springboot項(xiàng)目中引入knife4j的依賴即可,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

    Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

    這篇文章主要介紹了Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀,結(jié)合圖文形式詳細(xì)分析了java遞歸運(yùn)行的原理、機(jī)制與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • 詳談Java泛型中T和問(wèn)號(hào)(通配符)的區(qū)別

    詳談Java泛型中T和問(wèn)號(hào)(通配符)的區(qū)別

    下面小編就為大家?guī)?lái)一篇詳談Java泛型中T和問(wèn)號(hào)(通配符)的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Eclipse智能提示及快捷鍵

    Eclipse智能提示及快捷鍵

    本文主要介紹了Eclipse智能提示及快捷鍵的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • java分析html算法(java網(wǎng)頁(yè)蜘蛛算法示例)

    java分析html算法(java網(wǎng)頁(yè)蜘蛛算法示例)

    近來(lái)有些朋友在做蜘蛛算法,或者在網(wǎng)頁(yè)上面做深度的數(shù)據(jù)挖掘,下面使用示例
    2014-03-03
  • MybatisPlus的MetaObjectHandler與@TableLogic使用

    MybatisPlus的MetaObjectHandler與@TableLogic使用

    這篇文章主要介紹了MybatisPlus的MetaObjectHandler與@TableLogic使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java實(shí)現(xiàn)ArrayList自動(dòng)擴(kuò)容

    Java實(shí)現(xiàn)ArrayList自動(dòng)擴(kuò)容

    ArrayList的擴(kuò)容規(guī)則是非常簡(jiǎn)單的,它會(huì)根據(jù)需要自動(dòng)擴(kuò)容,本文就來(lái)介紹一下Java實(shí)現(xiàn)ArrayList自動(dòng)擴(kuò)容,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • java數(shù)據(jù)結(jié)構(gòu)與算法之馬踏棋盤(pán)

    java數(shù)據(jù)結(jié)構(gòu)與算法之馬踏棋盤(pán)

    這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之馬踏棋盤(pán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論