如何检查字符是否正确

我有很多角色,想要删除所有不是’#”的东西。 ‘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 expression
的第一部分buffer.get(buffertest) == 'G' evaluates to a boolean.
The second part of the expression
‘E’ buffer.get(buffertest) == 'G' evaluates to a boolean.
The second part of the expression
‘#’| ‘。’`计算结果为int,缩小为char

这导致不兼容的类型编译时错误。 您可以通过以下方式扩展检查来更正代码:

 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 == '.') 

您的原始代码失败,因为| 试图对四个字符执行按位“或”操作……这与在四个条件下执行逻辑“或”不同。