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返すと仮定すると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」を実行することと同じではありません。

于 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 に答える