2

我有一堆字符,想删除不是'#''的所有内容。“E”和“G”。

我试着用这个:

if (buffer.get(buffertest) == 'G'|'E'|'#'|'.')

但是遇到了不兼容类型的问题。

4

4 回答 4

4

这个根本问题是按位 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
}
于 2013-02-27T13:54:02.080 回答
3

您没有显示 的​​类型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 == '.')

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

于 2013-02-27T13:54:31.093 回答
3

您需要单独比较每个字符。假设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
}
于 2013-02-27T13:55:43.570 回答
1
if (buffer.get(buffertest) == 'G'||
 buffer.get(buffertest) == 'E'||
 buffer.get(buffertest) == '#'||
 buffer.get(buffertest) == '.')
于 2013-02-27T13:54:27.080 回答