为什么我不能在“if”语句中与'_'char进行比较?

时间:2016-05-07 12:52:54

标签: java if-statement char

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

不知道它是否有所作为,但是我在学习网站上运行此代码,因此没有纯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");
}

有人想到吗?

5 个答案:

答案 0 :(得分:6)

如果您在条件

后删除;,则可以
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

答案 1 :(得分:4)

问题在于这一行:

if(x==compare);

由于;,你在这里结束了if句子。因此,它每次都会打印"Match"

删除;并将其设为:

if(x==compare)

然后它会正常工作。

答案 2 :(得分:1)

修正:

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中不执行任何操作,并将继续到下一行,即打印。你需要在里面移动打印,因为它是唯一的声明,你不需要{}

问题就是为什么你应该使用大括号即使你不需要大括号。

答案 3 :(得分:1)

试试这个:

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条件!

答案 4 :(得分:1)

有时我们忘记从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);
}