我有一堆字符,想删除不是'#''的所有内容。“E”和“G”。
我试着用这个:
if (buffer.get(buffertest) == 'G'|'E'|'#'|'.')
但是遇到了不兼容类型的问题。
这个根本问题是按位 OR 运算符和 Java 运算符优先级层次结构的错误使用。这种类型的 Java 表达式从左到右求值,== 运算符优先于 |。结合起来,您的表达大致转化为:
(buffer.get(buffertest) == 'G') | 'E' | '#' | '.'
buffer.get(buffertest) == 'G' evaluates to a boolean.<br>
The second part of the expression
表达式“E”的第一部分| '#' | '.'` 计算为一个 int,它被缩小为一个 char
这会导致不兼容的类型编译时错误。您可以通过以下方式扩展检查来更正您的代码:
char ch = buffer.get(buffertest);
if(ch == 'G' || ch == 'E' || ch == '#' || ch == '.') {
// do something
}
您没有显示 的类型buffer
,这使事情变得更加困难。但假设buffer.get
返回 a char
,您可以使用:
if ("GE#.".indexOf(buffer.get(buffertest) >= 0)
或者您可以根据 Simulant 的回答明确检查每个选项......或者做同样的事情但只调用get
一次:
char x = buffer.get(buffertest);
if (x == 'G' || x == 'E' || x == '#' || x == '.')
您的原始代码失败,因为|
试图对四个字符执行按位“或”操作......这与在四个条件上执行逻辑“或”不同。
您需要单独比较每个字符。假设buffer.get(buffertest)
返回 a 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
}
if (buffer.get(buffertest) == 'G'||
buffer.get(buffertest) == 'E'||
buffer.get(buffertest) == '#'||
buffer.get(buffertest) == '.')