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("-\\.");
}
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("-\\.");
}
I think you need to include the regex OR operator:
String[]tokens = pdfName.split("-|\\.");
What you have will match:
[DASH followed by DOT together] -.
not
[DASH or DOT any of them] -
or .
Try this regex "[-.]+"
. The + after treats consecutive delimiter chars as one. Remove plus if you do not want this.
You can use the regex "\W".This matches any non-word character.The required line would be:
String[] tokens=pdfName.split("\\W");
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 "split on any character within the []
" (so, split on -
and .
). A couple of notes on that:
.
) by putting a backslash in front of it because in a regular expression .
means "any character." But you don't have to do that within a character class ([]
).[]
), you have to escape the dash (-
) because in that context it has special meaning (it indicates a range, like [0-9A-Fa-f]
to match all hex digits). But when it's the first character after the [
, we don't have to escape it.If you did need to escape either of those, the way you'd do it is by having a backslash in front of it in the string. Since we're writing this as a string literal, to actually put a backslash in the string requires that we escape it, since otherwise it's an escape character (for instance, \n
means newline, \t
means tab, etc.). So we'd have to write \\
to put an actual backslash in the string for the regular expression engine to see it and use it to escape the next character (-
or .
). For instance, "[\\-.]"
if we wanted to escape the -
even though we don't need to.
Live example: https://ideone.com/PMA8d3
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"}
pdfName.split("[.-]+");
[.-]
-> any one of the .
or -
can be used as delimiter
+
sign signifies that if the aforementioned delimiters occur consecutively we should treat it as one.
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
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.
Try this code:
var string = 'AA.BB-CC-DD.zip';
array = string.split(/[,.]/);
You may also specified regular expression as argument in split() method ..see below example....
private void getId(String pdfName){
String[]tokens = pdfName.split("-|\\.");
}
you can try this way as split accepts varargs so we can pass multiple parameters as delimeters
String[]tokens = pdfName.split("-",".");
you can pass as many parameters that you want.
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];
...