如何在这组分隔符中使用这个右括号():
第一组:
(?<=[-+*/%])
小组:
(?=[-+*/%])
我的代码是:
String str = " (31 + 4) -6+ 1 % 7";
String [] result = str.split("(?<=[-+*/%])|(?=[-+*/%]) " ) ;
System.out.println(Arrays.toString(result));
我希望这个右括号()作为括号[]中的其他字符, 同 后视断言
(?<=...)
和前瞻断言
(?=...)
输出是:
[ (31, +, 4), -, 6, +, 1, %, 7]
所需的输出:
[ ( , 31, +, 4 , ) , -, 6, +, 1, %, 7]
答案 0 :(得分:1)
将圆括号添加到您拥有的两个角色类可以帮助您实现所需。要删除空(仅空格)元素,可以使用.removeAll(Collections.singleton(" "))
对字符串列表运行的后处理。
因此,您可以使用以下代码:
String s = " (31 + 4) -6+ 1 % 7";
String[] sp = s.split("(?<=[-+*/%()])|(?=[-+*/%()])\\s*");
List<String> list = new ArrayList<String>(Arrays.asList(sp));
list.removeAll(Collections.singleton(" "));
System.out.println(list);
请参阅IDEONE demo
anubhava提到的另一种方式,[0-9]+|[-+*/%()]
正则表达式匹配数字序列或运算符:
String s = " (31 + 4) -6+ 1 % 7";
Pattern pattern = Pattern.compile("[0-9]+|[-+*/%()]");
Matcher matcher = pattern.matcher(s);
List<String> res = new ArrayList<>();
while (matcher.find()){
res.add(matcher.group(0));
}