.split()方法如何在java中工作?

时间:2013-06-29 07:02:54

标签: java string split java.util.scanner

我正在使用Java并且一直在尝试将我的字符串输入分成3部分。例如,我的输入将是“AND 1 1”,我希望它进入我的if循环,其中条件是parts [0] ==“AND”。但情况并非如此,我不确定原因。

我的代码列在下面

Scanner stringInput = new Scanner(System.in);
String input = stringInput.next();
System.out.printf("%s\n", input);
String[] parts = input.split(" ");

if (parts[0] == "AND") {
    if (parts[1] == parts[2] && parts[1] == "1") 
        System.out.printf("1\n");
    else 
        System.out.printf("0\n");
}
else {
    if (parts[1] == "1" || parts[2] == "0")
        System.out.printf("1\n");
    else 
        System.out.printf("0\n");
}

8 个答案:

答案 0 :(得分:2)

您使用的stringInput.next()不会读取空格。这就是问题所在。 使用stringInput.nextLine()代替stringInput.next()

使用包含空格的文本时,

String input=stringInput.nextLine();是正确的。

这是编辑过的代码。

Scanner stringInput = new Scanner(System.in);
String input = stringInput.nextLine();
System.out.printf("%s\n", input);
String[] parts = input.split(" ");

if (parts[0] == "AND") {
    if (parts[1] == parts[2] && parts[1] == "1") 
        System.out.printf("1\n");
    else 
        System.out.printf("0\n");
}
else {
    if (parts[1] == "1" || parts[2] == "0")
        System.out.printf("1\n");
    else 
        System.out.printf("0\n");
}

你可能有ArrayIndexOutOfBoundsException

答案 1 :(得分:2)

在Java中,您无法确定字符串是您认为的对象。因此,您不应使用==来比较对象,而是使用equals函数。

if (parts[0] == "AND")

应该是

if (parts[0].equals("AND"))

字符串是不可变的,因此当函数必须对它们执行某些操作时,函数将始终返回新字符串。因此,使用==仅适用于某些特定情况,但从不处理它们。

答案 2 :(得分:0)

试试这段代码:

if (parts[0].toString().equals("AND")){
    if (parts[1].equals(parts[2]) && parts[1].equals("1")) 
        System.out.printf("1\n");
    else 
        System.out.printf("0\n");
}else {
    if (parts[1].equals("1") || parts[2].equals("0"))
        System.out.printf("1\n");
    else 
        System.out.printf("0\n");
}

答案 3 :(得分:0)

您正在以正确的方式使用String.split()方法。使用该方法后,parts[0]还包含所需的"AND"

但问题是您使用“=="而不是equals方法检查两个字符串的相等性。当您使用==时,它会检查它们是否与字符串的引用相同equals方法检查字符串的值。

所以你的检查应该是这样的

if (parts[0].equals("AND"))

答案 4 :(得分:0)

使用

 parts[0].equals("AND") to check equality of `String`

答案 5 :(得分:0)

有几个问题:

  • 正如Java技术指出的那样,您应该使用stringInput.nextLine() vs stringInput.next()
  • 正如大家所指出的那样,使用.equals() vs ==,这是一个解释原因的线程:Java String.equals versus ==
  • 针对已知vs未知进行测试,重新排序您的测试,因此"AND".equals(part[0])应该屏蔽您的空指针

答案 6 :(得分:0)

只是为了完成Devolus的答案(我还不能在评论中添加评论U_U)

==比较引用,这意味着只有当两个变量指向同一个对象时才会出现

e.g。

  Object a =  new Car()
  Object b =   a  
  Object c =  new Car()





  (a == b) //true
  (a == c)  //false

  a.equals(b)  //true  
  a.equals(c)  //true 

答案 7 :(得分:0)

尝试使用.substring(),例如:

String a = "AND 1 1"
b = a.substring(1,3)
c = a.substring(4,5)
System.out.println(b)
System.out.println(c)

将打印“AND”然后“1”