java如何拆分字符串(基于各种分隔符),但不保留空格?
Java字符串是带括号的布尔表达式,&
、|
和!
作为运算符,我希望将它们拆分为标记。例如:
((!A1)&(B2|C3))
应该变成"(","(","!","A1",")","&","(","B2","|","C3",")",")"
在this answer之后,我发现可以将Java的String.split()
与包含lookahead和lookahead子句的正则表达式一起使用:
List<String> tokens = "((!A1)&(B2|C3))".split("((?<=[!&()|])|(?=[!&()|]))")
我唯一的问题是,空白将包括在令牌列表中。例如,如果我将表达式写为( ( !A1 ) & ( B2 | C3 ) )
,那么我的split()
将产生至少四个类似" "
的字符串,并且在变量周围有填充(例如" A1 "
)
如何修改这个split
表达式和regex来标记字符串,但不保留任何witespace强>
# 1 楼答案
您可以使用此正则表达式来匹配所需内容,而不是拆分:
RegEx Demo
正则表达式详细信息:
[!&()]
:匹配!
或&
或(
或)
|
:或[^!&()\h]+
:匹配任何不是!
、&
、(
、)
和空白的字符代码: