没有得到java String split方法的预期输出

时间:2016-10-16 22:04:05

标签: java string split

我有一个字符串说," 1.0 + 20 * 30.2-4.0 / 10.1"我希望以这样的方式分割,我将有一个字符串数组说

strArr = {"1.0", "20", "30.2", "4.0",10.1}

我为此编写了以下代码

public class StringSplitDemo {
public static void main(String[] args) {
    String str = "1.0+20*30.2-4.0/10.1";
    String[] strArr = (str.split("[\\+-/\\*]"));
    for(int i=0;i<strArr.length;i++)
      System.out.print(strArr[i]+" ");
  }
}

而不是打印预期的输出(由我),即1.0 20 30.2 4.0 10.1打印

output: 1 0 20 30 2 4 0 10 1 

似乎将字符串拆分为&#34;。&#34;即使我没有将它包含在正则表达式模式中。

我在这里失踪了什么? 这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

使用

String str = "1.0+20*30.2-4.0/10.1";
String[] strArr = str.split("[-+/*]");
System.out.print(Arrays.toString(strArr));

请参阅online Java demo

[\\+-/\\*]字符类不仅匹配您定义的4个字符,因为-创建了+/之间的范围。

enter image description here

您可以通过转义连字符来修复正则表达式,但是当您将-放在字符类的开头(或结尾)时,该模式看起来更清晰,您不必在那里转义它,连字符被视为文字-

答案 1 :(得分:0)

问题在于正则表达式

所以你需要逃避 + ,否则它会把它当作至少一次

String[] strArr = (str.split("[\\-/\\*\\+]"));

顺便说一下逃生符号不是必需的。它可以简单地写成

String[] strArr = (str.split("[-/*+]"));