在Java中拆分字符串时标记是否成功?

时间:2015-04-19 01:11:01

标签: java regex string split

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

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

然后使用ReplaceAll函数替换&#34; O&#34;以下是我想拆分的操作员:

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

然而,当应用此正则表达式来分割我提供的字符串作为示例时,我得到以下结果:{1,+,2,=,3,+ =,4,+ - ,5}。为什么这些弊端在第二个到最后一个令牌中都是加号?有没有解决这个问题,并使分裂标记显示为{1,+,2,=,3,+ =,4,+, - ,5}?

2 个答案:

答案 0 :(得分:1)

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

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]

答案 1 :(得分:0)

试试这个:

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);

<强>输出:

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