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

我需要分割一个string基于分隔符-. 。 以下是我所需的输出。

AA.BB-CC-DD.zip – >

 AA BB CC DD zip 

但我的下面的代码不起作用。

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

我认为你需要包含正则expression式OR运算符:

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

你所拥有的将会匹配“ – ”。 不是“ – ” “”。

试试这个正则expression式"[-.]+" 。 将连续的分隔符作为一个字符后的+。 删除加号,如果你不想要这个。

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

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

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

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

你给的string是一个正则expression式的stringforms,所以:

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

这意味着要拆分[]中的任何字符(我们必须使用反斜线 – 因为它在[]是特殊的;当然,我们必须避免使用反斜杠,因为这是一个string)。 (相反, .通常是特殊的,但在[]不是特别的。)

我会使用Apache Commons:

import org.apache.commons.lang3.StringUtils;

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

它会分割任何指定的分隔符,而不是使用完整的string作为分隔符的StringUtils.splitByWholeSeparator(str, separator)

如果你知道sting将始终是相同的格式,首先根据分割string. 并将第一个索引中的string存储在一个variables中。 然后根据-拆分第二个索引中的string,并存储索引0,1和2.最后,根据前一个数组拆分索引2 . 你应该已经获得了所有的相关领域。

请参阅以下代码片段:

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

你也可以在split()方法中指定正则expression式作为参数。

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

最好是使用这样的东西:

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

已经添加了一些其他字符作为示例。 这是最安全的方式,因为方式.'被对待。

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

应该工作。