我试图分割一个句子,但当我放置一些左右空间正则表达式无法拆分时,这是我的正则表达式:\\s*(<>@<>)+\\s*
我的字符串:
hello<>@<>i try!!<>@<>every thing<>@<><>@<>man<>@<>1234567
我的预期输出:
hello
i try!!
every thing
man
123456
Pattern pt = Pattern.compile("\\s*(<>@<>)+\\s*");
pm = pt.split(m);
当我尝试时,这不能分句。
hello <>@<>i try!! <>@<> every thing <>@<><>@<>man <>@<>1234567
有什么想法吗?
答案 0 :(得分:1)
如果我理解正确,你想分开一个空格,或<>@<>
,可以在空格之前和/或后面。
这应该执行你的分割:
String[] input = {
"hello<>@<>i try!!<>@<>every thing<>@<><>@<>man<>@<>1234567",
"hello <>@<>i try!! <>@<> every thing <>@<><>@<>man <>@<>1234567"
};
for (String s: input) {
System.out.println(Arrays.toString(s.split("(\\s?<>@<>\\s?)|\\s")));
}
<强>输出强>
[hello, i, try!!, every, thing, , man, 1234567]
[hello, i, try!!, every, thing, , man, 1234567]
注意强>
请注意String
和"thing"
之间的空"man"
,因为您有两个连续的分隔符。
您可以迭代并打印每一行,而不是打印数组。
for (String s: input) {
String [] split = s.split("(\\s?<>@<>\\s?)|\\s");
for (String item: split) {
System.out.println(item);
}
}
...每行会打印一个项目。
答案 1 :(得分:1)
这个正则表达式适合你:
(\\s*<>@<>\\s*)+
<强>代码:强>
String str = "hello <>@<>i try!! <>@<> every thing <>@<><>@<>man <>@<>1234567";
String[] toks = str.split( "(\\s*<>@<>\\s*)+" );
for (String tok: toks)
System.out.printf(">>> [%s]%n", tok);
str = "hello<>@<>i try!!<>@<>every thing<>@<><>@<>man<>@<>1234567";
toks = str.split( "(\\s*<>@<>\\s*)+" );
for (String tok: toks)
System.out.printf(">>> [%s]%n", tok);
输出(两次) ::
>>> [hello]
>>> [i try!!]
>>> [every thing]
>>> [man]
>>> [1234567]