如何检查角色是否正确

时间:2013-02-27 13:52:20

标签: java boolean character

我有很多角色,想要删除所有不是'#''的内容。 'E'和'G'。

我试着用这个:

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

但是出现了不兼容类型的问题。

4 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:3)

您尚未显示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 == '.')

您的原始代码失败,因为|正在尝试对四个字符执行按位“或”运算...这与在四个条件<上执行逻辑“OR”不同/ em>的

答案 2 :(得分:3)

您需要单独比较每个角色。假设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
}

答案 3 :(得分:1)

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