拆分字符串

我们可以在特定界定字符或者正则表达式之间拆分字符串,我们可以使用具有以下签名的字符串.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+"); //one or more space chars
//Result is words = {"What", "do", "you", "need", "from", "me?"};

我们甚至可以直接拆分字符串文字:

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

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

"aaa.bbb".split("."); //This returns an empty array

在前面的例子中。
被视为匹配任何字符的正则表达式通配符,因为每个字符都是分隔符,结果是空数组。

基于界定符拆分,这是正则表达式元字符

regex中的以下字符被视为特殊(AKA META字符)

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

要基于上述分隔符之一拆分字符串,我们需要使用\或者使用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("\|");

拆分时删除空值

默认情况下拆分(分隔符)删除结果数组的尾随空字符串。
要关闭这种机制,我们需要
使用重载版本的拆分(分隔符,限制),限制设置为负值

String[] split = data.split("\|", -1);
split(regex) internally returns result of split(regex, 0).

limit 参数控制应用模式的次数,因此影响所得数组的长度。

如果limit n大于零,则将最多应用模式1次,数组的长度不大于n,并且数组的最后一个条目将包含超出最后匹配的分隔符以外的所有输入。

如果n是否定的,则可以尽可能多次应用模式,并且数组可以具有任何长度。

如果n为零,则可以尽可能多次地应用模式,则数组可以具有任何长度,并且将丢弃尾随空字符串。

用stringTokenizer拆分

除了split()方法,字符串也可以使用stringTokenizer拆分。

stringTokenizer比String.split()更具限制性,也有点难以使用。
它本质上是为提取由一组固定字符(以字符串形式给出)分隔的标记而设计的。每个字符将充当分隔符。由于这个限制,它的速度大约是String.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
如何在Java中拆分字符串

Java中的字符串split()方法拆分给定正则表达式的匹配的给定字符串。

StringTokenizer类允许我们在应用程序中将字符串分解为标记。这个类是为保持一致性而保留的遗留类,尽管在新代码中不鼓励使用它。

日期:2020-06-02 22:15:19 来源:oir作者:oir