关于Java:将String.split()与多个分隔符一起使用

Use String.split() with multiple delimiters

我需要基于定界符-.拆分字符串。 以下是我想要的输出。

AA.BB-CC-DD.zip->

1
2
3
4
5
AA
BB
CC
DD
zip

但是我的以下代码不起作用。

1
2
3
private void getId(String pdfName){
    String[]tokens = pdfName.split("-\\\\.");
}


我认为您需要包括正则表达式OR运算符:

1
String[]tokens = pdfName.split("-|\\\\.");

您将拥有的搭配:
[DASH后跟DOT一起] -.

[其中的DASH或DOT] -.


试试这个正则表达式"[-.]+"。 +之后将连续的定界符char视为1。如果您不希望这样做,请删除加号。


您可以使用正则表达式" \ W"。它与任何非单词字符匹配。所需行为:

1
String[] tokens=pdfName.split("\\\\W");


使用番石榴,您可以这样做:

1
Iterable<String> tokens = Splitter.on(CharMatcher.anyOf("-.")).split(pdfName);

您提供的字符串split是正则表达式的字符串形式,因此:

1
2
3
private void getId(String pdfName){
    String[]tokens = pdfName.split("[\\\\-.]");
}

这意味着要分割[]中的任何字符(我们必须使用反斜杠对-进行转义,因为在[]中它是特殊的;当然,我们必须对反斜杠进行转义,因为这是一个字符串)。 (相反,.通常是特殊的,但在[]内部不是特殊的。)


对于两个字符序列作为分隔符" AND"和" OR",应进行此操作。使用时不要忘记修剪。

1
2
 String text ="ISTANBUL AND NEW YORK AND PARIS OR TOKYO AND MOSCOW";
 String[] cities = text.split("AND|OR");

结果:城市= {"伊斯坦布尔","纽约","巴黎","东京","莫斯科"}


1
String[] token=s.split("[.-]");


我会使用Apache Commons:

导入org.apache.commons.lang3.StringUtils;

1
2
3
private void getId(String pdfName){
    String[] tokens = StringUtils.split(pdfName,"-.");
}

它会在任何指定的分隔符上进行分割,而StringUtils.splitByWholeSeparator(str, separator)则使用完整的字符串作为分隔符


最好使用这样的东西:

1
s.split("[\\\\s\\\\-\\\\.\\\'\\\\?\\\\,\\\\_\\\\@]+");

添加了其他一些字符作为示例。这是最安全的使用方式,因为已处理.'的方式。


试试这个代码:

1
2
var string = 'AA.BB-CC-DD.zip';
array = string.split(/[,.]/);


您也可以在split()方法中将正则表达式指定为参数..请参见以下示例...。

1
2
3
private void getId(String pdfName){
String[]tokens = pdfName.split("-|\\\\.");
}

1
s.trim().split("[\\\\W]+")

应该管用。


如果您知道字符串将始终采用相同的格式,请首先基于.拆分字符串,然后将字符串存储在变量的第一个索引中。然后根据-在第二个索引中拆分字符串,并存储索引0、1和2。最后,根据.拆分上一个数组的索引2,您应该已经获得了所有相关字段。

请参考以下代码段:

1
2
3
4
5
String[] tmp = pdfName.split(".");
String val1 = tmp[0];
tmp = tmp[1].split("-");
String val2 = tmp[0];
...