0

我正在使用 Java,并且一直在尝试将我的字符串输入分成 3 个部分。例如,我的输入将是“AND 1 1”,我希望它进入条件为parts[0] ==“AND”的 if 循环。但事实并非如此,我不知道为什么。

我的代码在下面列出

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");
}
4

8 回答 8

2

您正在使用stringInput.next()which 不会读取空格。所以这就是问题所在。使用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

于 2013-06-29T07:08:27.707 回答
2

在 Java 中,您无法确定字符串是否就是您认为的对象。出于这个原因,你不应该使用==来比较对象,而应该使用equals函数。

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

应该

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

字符串是不可变的,因此当函数必须对它们执行某些操作时,它们总是会返回新字符串。出于这个原因, using==仅在某些特定情况下有效,但在处理它们时永远不会。

于 2013-06-29T07:11:57.660 回答
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”

于 2013-06-29T09:00:26.767 回答
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");
}
于 2013-06-29T07:07:52.413 回答
0

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

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

例如

  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 
于 2013-06-29T07:38:17.977 回答
0

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

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

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

if (parts[0].equals("AND"))
于 2013-06-29T07:14:22.787 回答
0

利用

 parts[0].equals("AND") to check equality of `String`
于 2013-06-29T07:14:55.843 回答
0

有几个问题:

  • 正如 JavaTechnical 指出的,你应该使用stringInput.nextLine()vsstringInput.next()
  • 正如每个人都指出的那样,使用.equals()vs ==,这里有一个解释原因的线程:Java String.equals vs ==
  • 针对已知与未知进行测试,像这样重新排序您的测试"AND".equals(part[0])应该保护您免受空指针的影响
于 2013-06-29T07:26:59.310 回答