[英]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.