I have a string like:
String t = "this is my--test string";
I need to split it by space and -- So i tried:
String[] m = t.split("[\\s -]");
It returns
["this", "is", "my", "", "test", "string"]
but in reality i needed
["this", "is", "my", "--", "test", "string"]
What am I missing? is this possible?
CodePudding user response:
You can use
String[] result = t.split("\\s |(?<=--)(?!--)|(?<!--)(?=--)")
See the regex demo. Details:
\s
- one or more whitespaces|
- or(?<=--)(?!--)
- a location immediately preceded with--
and not immediately followed with--
|
- or(?<!--)(?=--)
- a location not immediately preceded with--
and immediately followed with--
.
See the Java demo:
String regex = "\\s |(?<=--)(?!--)|(?<!--)(?=--)";
String string = "this is my--test string";
System.out.println(Arrays.toString(string.split(regex)));
// => [this, is, my, --, test, string]
CodePudding user response:
I wasn't able to do it with just regex but does this work?
String t = "this is my--test string";
t = t.replace( "--", " -- " );
String[] m = t.split(" ");
CodePudding user response:
You can use a regex matcher to do this:
public static void main (String[] args) {
final String t = "this is my--test string";
final String regex = "(- )|(\\w )";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(t);
List<String> split = new ArrayList<>();
while (matcher.find()) {
split.add(matcher.group(0));
}
System.out.println(split);
}
The regex explanation:
(- )
: matches the character "-" one or multiple times;|
: equivalent to boolean OR;(\\w )
: matches any word character (equivalent to[a-zA-Z0-9_]
) one or multiple times.
CodePudding user response:
This should give you what you want and is slightly simpler than the earlier answer (which also works).
String[] m = t.split("\\s |\\-\\-");