2

メソッドにバイトを受け取り、シリアルで送信したいのですが、有効なバイト(つまり、a-zA-Z0-9 "!£$%^&*()-_ = +)のみを送信したいのです。そのように、スペース、新しい行など。アクセントや�のような文字を、任意の順序で何度でも除外したいだけです。

仕事をしているすべてのキャラクターを含めて、このようなものでしょうか|

^[a-z|A-Z|0-9|\\s|-<other characters>]*

または、正しい表現は何でしょうか?

したがって、文字列に「exit����」が含まれている場合は、「exit」のみを送信し、無効な文字は送信せず、他のすべてを送信します。

public void write(byte[] bytes, int offset, int count) {
  String str;
  try {
    str = new String(bytes, "ASCII");
    Log.d(TAG, "data received in write: " +str );
    //^[a-z|A-Z|0-9|\s|-]*
    //test here, call next line on any character that is valid
    GraphicsTerminalActivity.sendOverSerial(str.getBytes("ASCII"));
  } catch (UnsupportedEncodingException e) {
    Log.d(TAG, "exception" );
    e.printStackTrace();
  }
  // appendToEmulator(bytes, 0, bytes.length);
}

編集:私はASCII文字の範囲である[^ \ x00- \ x7F]を試しましたが、それでも�記号は通り抜けます、奇妙です。

4

4 に答える 4

3

[\x20-\x7E]These are the ASCII code of the printable charactersのようなパターンを使用してみてください。

ちなみに、これはあなたの質問で解析する方法であるため、ASCIIについて質問していると思います。

于 2013-01-25T17:07:57.243 に答える
1

まだ調べていない場合は、Java のNormalizerクラスを調べることをお勧めします。文字全体を破棄する代わりに、アクセント付きの文字から「通常の」文字を抽出できます。

このアイデアの正確な出典は覚えていませんが (最近、アクセントにとらわれない検索をしようとしていました)、簡単な検索でこの単純なブログ投稿が見つかりました。

于 2013-01-25T17:29:00.033 に答える
1

検索置換を行いたい:

String fixed = input.replaceAll("[^\p{Print}\t\n]", "");

ロルフ

編集:参照を追加:

Pattern Javadoc -> POSIX 文字クラス (US-ASCII のみ) まで下にスクロールします。

上記のパターンは、印刷可能な文字ではないすべての文字に一致します....

于 2013-01-25T17:11:22.600 に答える
1

パイプは、文字のリストを正規表現に変換する正しい方法ではありません。角かっこで囲まれた文字クラスに文字を入れます。文字クラスのすべての文字は、デフォルトで OR されるため、パイプは必要ありません。数字や文字以外の記号をエスケープする必要があります。

[a-zA-Z0-9\"\!\£\$\%\^\&\*\(\)\-\_\=\+]

そして、それをJava文字列に入れたい場合は、エスケープを二重にエスケープする必要があります

Pattern p = Pattern.compile("[a-zA-Z0-9\\"\\!\\£\\$\\%\\^\\&\\*\\(\\)\\-\\_\\=\\+]");

ポンド記号 (£) はASCII 文字ではないため、ASCII に変換しても機能しないことに注意してください。

于 2013-01-25T17:39:51.327 に答える