我正在使用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");
}
答案 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)
有几个问题:
stringInput.nextLine()
vs stringInput.next()
.equals()
vs ==
,这是一个解释原因的线程:Java String.equals versus == "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”