たくさんの文字があり、'#' '.' 以外のものをすべて削除したいと考えています。「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
返すと仮定するとchar
、次のように使用できます。
if ("GE#.".indexOf(buffer.get(buffertest) >= 0)
get
または、Simulant の回答に従って、各オプションを明示的にチェックすることもできます...または同じことを行いますが、 1 回だけ呼び出します。
char x = buffer.get(buffertest);
if (x == 'G' || x == 'E' || x == '#' || x == '.')
|
4 つの文字に対してビットごとの「OR」演算を実行しようとしているため、元のコードは失敗しています。これは、4 つの条件で論理「OR」を実行することと同じではありません。
各キャラクターを個別に比較する必要があります。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) == '.')