[英]How to split a string (based on a variety of delimiters) but without keeping whitespace?
我有 Java 字符串,它们是带括号的 boolean 表达式, &
, |
, 和!
作为运营商,我想将它们拆分为令牌。 例如:
((!A1)&(B2|C3))
应该变成"(","(",",","A1",")","&","(","B2","|","C3",")",")"
按照这个答案,我发现我可以将 Java 的String.split()
与包含前瞻和后瞻子句的正则表达式一起使用:
List<String> tokens = "((!A1)&(B2|C3))".split("((?<=[!&()|])|(?=[!&()|]))")
我唯一的问题是空格将包含在令牌列表中。 例如,如果我将表达式写为( ( !A1 ) & ( B2 | C3 ) )
那么我的split()
将产生至少四个像" "
的字符串,并且我的变量周围会有填充(例如" A1 "
)。
如何修改此split
表达式和正则表达式以标记字符串但不保留任何空白空间?
您可以使用这个正则表达式而不是 split 来匹配您想要的内容:
[!&()]|[^!&()\h]+
正则表达式详细信息:
[!&()]
: 匹配!
或&
或(
或)
|
: 或者[^!&()\h]+
:匹配任何不是的字符!
, &
, (
, )
和一个空格代码:
final String regex = "[!&()]|[^!&()\\h]+";
final String string = "((!A1)&( B2 | C3 ))";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
List<String> result = new ArrayList<>();
while (matcher.find()) {
result.add(matcher.group(0));
}
System.out.println(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.