为啥我不能在“if”语句中与 '_' 字符进行比较? [关闭]

Posted

技术标签:

【中文标题】为啥我不能在“if”语句中与 \'_\' 字符进行比较? [关闭]【英文标题】: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 规则/重新格式化在这里会有所帮助。 【参考方案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)

然后就可以正常使用了。

【讨论】:

以上是关于为啥我不能在“if”语句中与 '_' 字符进行比较? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在使用 Javascript 的 if 语句中重新分配这个变量? [复制]

为啥我不能使用正则表达式来评估 if...else 语句 [重复]

为啥我的 If 语句在 PHP 中接受不正确的字符串条件?

为啥在 if 语句中初始化字符串似乎与在 switch 语句中不同? [复制]

为啥在预处理器定义中使用 if 语句?

python中以下语句为啥会有两个__init__