Java分割字符串

示例

您可以分割String特定的分隔字符或正则表达式,可以使用具有以下签名的方法:String.split()

public String[] split(String regex)

请注意,定界字符或正则表达式将从结果字符串数组中删除。

使用分隔字符的示例:

String lineFromCsvFile = "Mickey;Bolton;12345;121216";
String[] dataCells = lineFromCsvFile.split(";");
// Result is dataCells = { "Mickey", "Bolton", "12345", "121216"};

使用正则表达式的示例:

String lineFromInput = "What    do you need    from me?";
String[] words = lineFromInput.split("\\s+"); // 一个或多个空格
// Result is words = {"What", "do", "you", "need", "from", "me?"};

您甚至可以直接拆分String文字:

String[] firstNames = "Mickey, Frank, Alicia, Tom".split(", ");
// Result is firstNames = {"Mickey", "Frank", "Alicia", "Tom"};

警告:不要忘记该参数始终被视为正则表达式。

"aaa.bbb".split("."); // 这将返回一个空数组

在前面的示例.中,正则表达式通配符与任何字符匹配,并且由于每个字符都是定界符,因此结果为空数组。


根据定界符(即正则表达式元字符)进行拆分

下列字符在正则表达式中被认为是特殊字符(又名元字符)

  < > - = ! ( ) [ ] { } \ ^ $ | ? * + .

要基于上述定界符之一拆分字符串,您需要使用或使用来转义它们:\\Pattern.quote()

  • 使用:Pattern.quote()

     String s = "a|b|c";
    String regex = Pattern.quote("|");
    String[] arr = s.split(regex);
  • 转义特殊字符:

     String s = "a|b|c";
    String[] arr = s.split("\\|");

拆分删除空值

split(delimiter)默认情况下,从结果数组中删除结尾的空字符串。要关闭此机制,我们需要使用split(delimiter, limit)极限值设置为负值的重载版本,例如

String[] split = data.split("\\|", -1);

split(regex)内部返回的结果split(regex, 0)。

limit参数控制应用图案的次数,因此会影响所得数组的长度。
如果限制n大于零,则将最多应用n-1次该模式,该数组的长度将不大于n,并且该数组的最后一个条目将包含除最后一个匹配的定界符之外的所有输入。
如果n为负,则该模式将被尽可能多地应用,并且数组可以具有任何长度。
如果n为零,则该模式将被尽可能多地应用,该数组可以具有任何长度,并且尾随的空字符串将被丢弃。


与分裂 StringTokenizer

除了split()方法之外,字符串还可以使用进行拆分StringTokenizer。

StringTokenizer比更具限制性,并且使用起来也有些困难。它本质上是设计用于提取由一组固定字符(以表示)分隔的令牌的。每个字符将充当分隔符。由于此限制,速度约为的两倍。String.split()StringString.split()

默认字符集为空格(\t\n\r\f)。以下示例将分别打印出每个单词。

String str = "the lazy fox jumped over the brown fence";
StringTokenizer tokenizer = new StringTokenizer(str);
while (tokenizer.hasMoreTokens()) {
    System.out.println(tokenizer.nextToken());
}

这将打印出:

the
lazy 
fox 
jumped 
over 
the 
brown 
fence

您可以使用不同的字符集进行分隔。

String str = "jumped over";
// 在这种情况下,字符“ u”和“ e”将用作分隔符 
StringTokenizer tokenizer = new StringTokenizer(str, "ue");
while (tokenizer.hasMoreTokens()) {
    System.out.println(tokenizer.nextToken());
}

这将打印出:

j
mp 
d ov
r