繁体   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