簡體   English   中英

如何拆分字符串(基於各種分隔符)但不保留空格?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM