我有很多角色,想要删除所有不是'#''的内容。 'E'和'G'。
我试着用这个:
if (buffer.get(buffertest) == 'G'|'E'|'#'|'.')
但是出现了不兼容类型的问题。
答案 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) == '.')