使用String.split()和多个分隔符

我需要根据分隔符-.分割字符串。下面是我想要的输出。

AA.BB-CC-DD.zip - - - >

AA
BB
CC
DD
zip

但是我下面的代码不能工作。

private void getId(String pdfName){
String[]tokens = pdfName.split("-\\.");
}
489937 次浏览

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

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

你所拥有的将匹配:
[DASH + DOT] -.
. 不是< br > [DASH或DOT任意一个]-.

试试这个正则表达式"[-.]+"。后面的+将连续的分隔符字符视为一个字符。如果你不想要这个,就去掉加号。

你给split的字符串是正则表达式的字符串形式,所以:

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

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

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

参考以下片段:

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

使用番石榴你可以这样做:

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

你可以使用正则表达式“\W”。这将匹配任何非单词字符。所需的行是:

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

我会使用Apache Commons:

进口org.apache.commons.lang3.StringUtils;

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

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

你也可以在split()方法中指定正则表达式作为参数。请看下面的例子....

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

最好使用这样的代码:

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

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

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

应该工作。

对于两个字符序列作为delimeter“AND”和“OR”,这应该工作。使用时别忘了修剪。

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

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

试试下面的代码:

var string = 'AA.BB-CC-DD.zip';
array = string.split(/[,.]/);
String[] token=s.split("[.-]");

pdfName.split("[.-]+");

  • < p > [.-].-中的任何一个都可以用作分隔符

  • +符号表示如果上述分隔符连续出现,则应将其视为一个分隔符。

你可以尝试这种方法,因为split接受可变参数,所以我们可以传递多个参数作为delimeter

 String[]tokens = pdfName.split("-",".");

您可以传递任意数量的参数。