Java 用 2 个分隔符拆分字符串
Java split string with 2 delimiters
我正在尝试使用 String.split()
拆分一些字符串。
我希望它根据字符拆分字符串:"++"
和 "+"
。例如,"1 + 1"
将拆分为 {1, +, 1}
,而 "1 ++ 1"
将拆分为 {1, ++, 1}
。我写了这一行来拆分文本:
String[] temp = tokens.split("(?<=(\++)|(\+))|(?=(\++)|(\+))");
这适用于 "1 + 1"
(输出:{ 1, +, 1 }
),但不适用于 "1 ++ 1"
(输出:{ 1, +, +, 1 }
)。我知道我可以将它转换成一个 ArrayList 并找到一个 "+"
后跟一个 "+"
然后简单地将它们组合成一个标记但是我很好奇是否可以用 split()
?
您可以尝试拆分具有
的零个或多个空格
- 前面的数字和后面的运算符像
12|+ 32
(我用 |
标记了这样的位置)
- 或前面的运算符和后面的数字
12 ++|32
。
你的拆分看起来像
split("(?<=\d)\s*(?=[+])|(?<=[+])\s*(?=\d)")
演示:
String[] data = {"1++1" , "1 ++1", "1+ 1"};
for (String str : data){
for (String token : str.split("(?<=\d)\s*(?=[+])|(?<=[+])\s*(?=\d)")){
System.out.println("token: <"+token+">");
}
System.out.println("--------");
}
输出(我用 <
和 >
包围了标记,以向您展示它们也去掉了空格):
token: <1>
token: <++>
token: <1>
--------
token: <1>
token: <++>
token: <1>
--------
token: <1>
token: <+>
token: <1>
--------
贪心量词对我有用:
String [] cases = { "1+1", "1++1" };
for (String str: cases) {
String out [] = str.split("(\+)*");
System.out.println(Arrays.asList(out));
}
生成:
[1, , 1]
[1, , 1]
如果这还不行,那么 post 更多测试用例。
我正在尝试使用 String.split()
拆分一些字符串。
我希望它根据字符拆分字符串:"++"
和 "+"
。例如,"1 + 1"
将拆分为 {1, +, 1}
,而 "1 ++ 1"
将拆分为 {1, ++, 1}
。我写了这一行来拆分文本:
String[] temp = tokens.split("(?<=(\++)|(\+))|(?=(\++)|(\+))");
这适用于 "1 + 1"
(输出:{ 1, +, 1 }
),但不适用于 "1 ++ 1"
(输出:{ 1, +, +, 1 }
)。我知道我可以将它转换成一个 ArrayList 并找到一个 "+"
后跟一个 "+"
然后简单地将它们组合成一个标记但是我很好奇是否可以用 split()
?
您可以尝试拆分具有
的零个或多个空格- 前面的数字和后面的运算符像
12|+ 32
(我用|
标记了这样的位置) - 或前面的运算符和后面的数字
12 ++|32
。
你的拆分看起来像
split("(?<=\d)\s*(?=[+])|(?<=[+])\s*(?=\d)")
演示:
String[] data = {"1++1" , "1 ++1", "1+ 1"};
for (String str : data){
for (String token : str.split("(?<=\d)\s*(?=[+])|(?<=[+])\s*(?=\d)")){
System.out.println("token: <"+token+">");
}
System.out.println("--------");
}
输出(我用 <
和 >
包围了标记,以向您展示它们也去掉了空格):
token: <1>
token: <++>
token: <1>
--------
token: <1>
token: <++>
token: <1>
--------
token: <1>
token: <+>
token: <1>
--------
贪心量词对我有用:
String [] cases = { "1+1", "1++1" };
for (String str: cases) {
String out [] = str.split("(\+)*");
System.out.println(Arrays.asList(out));
}
生成:
[1, , 1]
[1, , 1]
如果这还不行,那么 post 更多测试用例。