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 字符 (|| &&) 非法的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别