繁体   English   中英

在Java中拆分字符串时令牌会粘住吗?

[英]Tokens stick when splitting a String in Java?

我试图在不依赖空格的情况下将测试字符串“ 1 + 2 = 3 + = 4 + --5”拆分为多个组件。 我希望最终结果为{1,+,2,=,3,+ =,4,+,-,5},但是有些标记似乎粘在一起。 我编写了以下正则表达式来拆分字符串:

"(?<=(\\.)|(\\w))\\s*(?=[O])|(?<=[O])\\s*(?=(\\.)|(\\w))"

然后使用ReplaceAll函数将“ O”替换为以下内容,这些是我要分割的运算符:

"(\\\\+)|(\\\\=)|(\\\\+=)|(\\\\-)"

但是,当将此正则表达式应用于作为示例提供的字符串拆分时,我得到以下结果:{1,+,2,=,3,+ =,4,+-,5}。 为什么在倒数第二个标记中负号会坚持加号? 无论如何,有没有解决此问题并使拆分标记显示为{1,+,2,=,3,+ =,4,+,-,5}?

您可以进行匹配而不是拆分。

String a = "1 + 2 = 3 += 4 +--5";
Matcher m = Pattern.compile("\\d+|[^\\w\\s]+").matcher(a);
ArrayList<String> list = new ArrayList<String>();
while (m.find()) {
    list.add(m.group());
}
System.out.println(list);

输出:

[1, +, 2, =, 3, +=, 4, +--, 5]

尝试这个:

String input = "1 + 2 = 3 += 4 + --5";
//StringTokenizer stringTokenizer = new StringTokenizer(input, " ");
StringTokenizer stringTokenizer = new StringTokenizer(input, "1234567890", true);

StringBuilder builder = new StringBuilder("[");

while (stringTokenizer.hasMoreElements()) {
  //builder.append(stringTokenizer.nextElement());
  builder.append(stringTokenizer.nextElement().toString().trim());
  builder.append(stringTokenizer.hasMoreTokens() ? "," : "]");
}
System.out.printf("Using the java.util.StringTokenizer: %s%n", builder);

OUTPUT:

Using the java.util.StringTokenizer: [1, +, 2, =, 3, +=, 4, +, --5]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM