我正在尝试使用String.split()
分割一些字符串。
我希望它根据字符"++"
和"+"
分割字符串。例如,"1 + 1"
将被分为{1, +, 1}
,"1 ++ 1"
将被分为{1, ++, 1}
。我写了这一行来分割文本:
String[] temp = tokens.split("(?<=(\\++)|(\\+))|(?=(\\++)|(\\+))");
这适用于"1 + 1"
(输出:{ 1, +, 1 }
),但它不适用于"1 ++ 1"
(输出:{ 1, +, +, 1 }
)。我知道我可以将它转换为ArrayList并找到"+"
后跟"+"
并简单地将它们合并为一个令牌但是我很好奇是否可以使用{{1}执行此操作}?
答案 0 :(得分:1)
您可以尝试拆分零个或多个具有
的空格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>
--------
答案 1 :(得分:0)
贪婪的量词对我有用:
String [] cases = { "1+1", "1++1" };
for (String str: cases) {
String out [] = str.split("(\\+)*");
System.out.println(Arrays.asList(out));
}
产生
[1, , 1]
[1, , 1]
如果这没有削减它,那么发布更多测试用例。