Use String.split() with multiple delimiters

2019-01-01 06:39发布

问题:

I need to split a string base on delimiter - and .. Below are my desired output.

AA.BB-CC-DD.zip ->

AA
BB
CC
DD
zip 

but my following code does not work.

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

回答1:

I think you need to include the regex OR operator:

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

What you have will match \"-.\" not a \"-\" or a \".\"



回答2:

Try this regex \"[-.]+\". The + after treats consecutive delimiter chars as one. Remove plus if you do not want this.



回答3:

You can use the regex \"\\W\".This matches any non-word character.The required line would be:

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


回答4:

Using Guava you could do this:

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


回答5:

The string you give split is the string form of a regular expression, so:

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

That means to split on any character in the [] (we have to escape - with a backslash because it\'s special inside []; and of course we have to escape the backslash because this is a string). (Conversely, . is normally special but isn\'t special inside [].)



回答6:

I\'d use Apache Commons:

import org.apache.commons.lang3.StringUtils;

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

It\'ll split on any of the specified separators, as opposed to StringUtils.splitByWholeSeparator(str, separator) which uses the complete string as a separator



回答7:

For two char sequence as delimeters \"AND\" and \"OR\" this should be worked. Don\'t forget to trim while using.

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

Result : cities = {\"ISTANBUL \", \" NEW YORK \", \" PARIS \", \" TOKYO \", \" MOSCOW\"}



回答8:

You may also specified regular expression as argument in split() method ..see below example....

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


回答9:

It\'s better to use something like this:

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

Have added a few other characters as sample. This is the safest way to use, because the way . and \' is treated.



回答10:

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

should work.



回答11:

If you know the sting will always be in the same format, first split the string based on . and store the string at the first index in a variable. Then split the string in the second index based on - and store indexes 0, 1 and 2. Finally, split index 2 of the previous array based on . and you should have obtained all of the relevant fields.

Refer to the following snippet:

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


标签: java regex