【问题标题】:Why can't I compare to '_' char in an "if" statement? [closed]为什么我不能在“if”语句中与 '_' 字符进行比较? [关闭]
【发布时间】:2016-09-02 11:53:57
【问题描述】:

尝试在StringBuffer 中搜索_ 字符的出现。我的代码在下面,但是当我运行时,StringBuffer 中的每个数字都会打印Match

不知道这是否有区别,但我在学习网站上运行此代码,因此没有纯 Java 调试器。我检查了标准转义字符,这不是其中之一,所以我没有想法。

StringBuffer buffer = new StringBuffer(functionName);
System.out.println(buffer);
char compare='_';
char x;
for(int i=0;i<buffer.length();i++){
  x = buffer.charAt(i);
  System.out.println(x);
  if(x==compare);
  System.out.println("Match");
}

有人想吗?

【问题讨论】:

  • 使用equals方法而不是==
  • @kaanyılmaz 错误。为了比较char==正确的方法,与所有原语一样。
  • 另外,FWIW,any 体面的 IDE 会在该特定行发出警告,准确说明它有什么问题。在这种情况下,他没有使用一个是 OP 的错。此外,使用 Always Put Braces Around 规则/重新格式化在这里会有所帮助。

标签: java if-statement char


【解决方案1】:

如果您在条件后删除;,则可以

if (x == compare) {
    System.out.println("Match");
}

对于你的情况,它看起来像

if (x == compare); // if `x` and `compare` are equal, we do nothing
System.out.println("Match"); // it prints out `Match` regardless of the condition

【讨论】:

  • 谢谢。就是那个!偷偷摸摸的分号...
【解决方案2】:

有时我们忘记从 if 语句中删除分号,所以这里最好使用条件运算符。下面是源代码。

StringBuffer buffer=new StringBuffer(functionName);
System.out.println(buffer);
char compare='_';
char x;
for(int i=0;i<buffer.length();i++){
    x = buffer.charAt(i);
    System.out.println((x==compare)?x+" Match":x);
}

【讨论】:

    【解决方案3】:

    试试这个:

    StringBuffer buffer=new StringBuffer(functionName);
    System.out.println(buffer);
    char compare='_';
    char x;
    for(int i=0;i<buffer.length();i++){
      x = buffer.charAt(i);
      System.out.println(x);
      if(x==compare)
      System.out.println("Match");
    }
    

    如果你添加';'在 if 语句之后,下一条指令不考虑进入 if 条件!

    【讨论】:

      【解决方案4】:

      固定:

      StringBuffer buffer=new StringBuffer(functionName);
      System.out.println(buffer);
      char compare='_';
      char x;
      for(int i=0;i<buffer.length();i++){
        x = buffer.charAt(i);
        System.out.println(x);
        if(x==compare) System.out.println("Match");
      }
      

      使用; 结束语句,因此它不会在if 中执行任何操作,并将继续下一行,即打印。您需要在 if 中移动打印,并且由于它是那里唯一的语句,因此您不需要{}

      您遇到的问题是即使您不需要大括号也应该使用它们的原因。

      【讨论】:

        【解决方案5】:

        问题出在这一行:

        if(x==compare);
        

        由于;,您在此处结束 if 语句。所以,它每次都会打印"Match"

        删除; 并制作它:

        if(x==compare)
        

        然后就可以正常使用了。

        【讨论】: