Java - if 语句中的 OR / AND 字符 (|| &&) 非法
Posted
技术标签:
【中文标题】Java - if 语句中的 OR / AND 字符 (|| &&) 非法【英文标题】:Java - OR / AND characters (|| &&) illegal in if-statement 【发布时间】:2015-06-12 07:56:18 【问题描述】:我正在使用扫描仪编写一个简单的程序,现在想通过将输入与这些单词进行比较来确保用户只键入“是”或“否”。我正在使用带有||
(管道)的普通if
-statement:
if (!input.equals("yes") || !input.equals("no"))
//do something
Java(我正在使用 BlueJ)抱怨我的管道,它说:“非法字符:'\u00a0'”
我尝试了什么
我从***站点复制并粘贴了管道,以确保我确实使用了正确的管道字符 重新启动 BlueJ 尝试使用等号 (&&),同样的错误 如果我删除了第二个条件和它工作的管道有谁知道它为什么会抱怨以及如何解决它? – 提前致谢
【问题讨论】:
u00a0 是一种特殊类型的空格字符 (fileformat.info/info/unicode/char/00a0/index.htm)。也许你的空间不正常。为什么不尝试用普通空格替换它们(使用空格键)? 好像和Illegal character with Blue J中的问题一样。 作为记录,输入“no”作为输入将进入此 if 块,因为您的代码短路。当您输入“否”时,输入不是“是”的第一个条件为真,它永远不会评估第二个条件。 @Aify 它将输入它,因为表达式对于任何输入值都是正确的。要使其评估为假,输入必须同时等于“是”和“否”。 我只是以“不”为例。你是对的,短路条件总是适用的。 【参考方案1】:字符u00a0
是一个不间断的空格。
您似乎在代码中键入了一个控制字符,替换此行副本中的所有内容
if(!input.equals("yes") && !input.equals("no"))
或者干脆取消行中的空格并重新输入(确保没有输入nbsp
)。
请注意,我将||
更改为&&
,例如键入“no”仍会输入条件,因为“yes”不等于输入。然后,您的条件将是 true || false
,这将导致 true
。
无论如何,这与||
或&&
运算符无关,它是空格。
【讨论】:
所以,我故意使用了!
,如果这个词不是其中之一,我想给出一条错误消息
@LinusG。好的,我编辑了否定句。
哇,它现在可以工作了,奇怪的是现在我的版本也可以工作了......你实际上改变了什么?
@LinusG 我只是自己输入了一行。您行中的空格是不间断空格而不是普通空格,这对于编译器来说不是有效字符。这是肉眼看不到的,但 "illegal character: '\u00a0'" 告诉我们这是不正确的。一个普通的空间是U0020
感谢大家的大量 cmets 和解释时的不沮丧。 @Jean-FrançoisSavard:不过,我的方式完全没问题(我认为)。我希望如果用户没有输入任何一个,那么除了“是”或“否”之外的任何其他内容都会通过 if 块。【参考方案2】:
'\u00a0' 解析为非中断空间,因此问题可能不是管道。尝试消除管道周围的空间并将否定语句括在括号中,看看错误是否仍然存在。
【讨论】:
以上是关于Java - if 语句中的 OR / AND 字符 (|| &&) 非法的主要内容,如果未能解决你的问题,请参考以下文章