如何检查字符是否正确
我有很多角色,想要删除所有不是’#”的东西。 ‘E’和’G’。
我试着用这个:
if (buffer.get(buffertest) == 'G'|'E'|'#'|'.')
但是出现了不兼容类型的问题。
if (buffer.get(buffertest) == 'G'|| buffer.get(buffertest) == 'E'|| buffer.get(buffertest) == '#'|| buffer.get(buffertest) == '.')
这个根问题是使用按位OR运算符和Java运算符优先级层次结构。 此类型的Java表达式从左到右计算,并且==运算符优先于|。 结合使用时,您的表达式大致转换为:
(buffer.get(buffertest) == 'G') | 'E' | '#' | '.'
表达式buffer.get(buffertest) == 'G' evaluates to a boolean.
的第一部分
The second part of the expressionbuffer.get(buffertest) == 'G' evaluates to a boolean.
‘E’
The second part of the expressionbuffer.get(buffertest) == 'G' evaluates to a boolean.
‘#’| ‘。’`计算结果为int,缩小为char
The second part of the expression
这导致不兼容的类型编译时错误。 您可以通过以下方式扩展检查来更正代码:
char ch = buffer.get(buffertest); if(ch == 'G' || ch == 'E' || ch == '#' || ch == '.') { // do something }
您需要单独比较每个字符。 假设buffer.get(buffertest)
返回一个char
,这里是如何做到的:
char c = buffer.get(buffertest); if (c == 'G' || c == 'E' || c == '#' || c == '.') { // do something }
或者,您可以这样做:
char c = buffer.get(buffertest); if ("GE#.".contains(Character.toString(c))) { // do something }
你还没有显示buffer
的类型,这会让事情变得更难。 但假设buffer.get
返回一个char
,您可以使用:
if ("GE#.".indexOf(buffer.get(buffertest) >= 0)
或者你可以明确地检查每个选项,根据Simulant的答案……或者做同样的事情,但只调用get
一次:
char x = buffer.get(buffertest); if (x == 'G' || x == 'E' || x == '#' || x == '.')
您的原始代码失败,因为|
试图对四个字符执行按位“或”操作……这与在四个条件下执行逻辑“或”不同。