0

さて、文字、数字、およびいくつかの「奇妙な」文字を含む文字列があります。この「奇妙な」文字を「空白」に置き換えたい。

私の元の文字列を見てください:

AVE  14 DE JULHO N�130

私はに置き換えたい:

AVE 14 DE JULHO N 130

これはほんの一例ですが、「普通のキャラクター」と「変なキャラクター」がたくさん入った大きなファイルがあります

4

3 に答える 3

3

replaceAllパターンに一致するすべての文字を置き換えるために使用できます。

String bad = "AVE  14 DE JULHO N�130";
String badPattern = "[^a-zA-Z0-9 ]"; // anything not a good character
String good = bad.replaceAll(badPattern, " ");

または、悪い文字の範囲がわかっている場合:

String bad = "AVE  14 DE JULHO N�130";
String badPattern = "[\\u0080-\\uffff]"; // anything above U+007f
String good = bad.replaceAll(badPattern, " ");

最後の例は正の一致パターンの単なる例であり、使用する範囲を推奨するものではないことに注意してください! 特にその範囲では、ほとんどのアクセント記号が削除されます。

編集これらの「奇妙な」文字は、文字列を構築 (または使用) するプロセスのどこかで間違った文字エンコーディングを使用して解釈された、実際には適切な文字である可能性が最も高いです。エラーの結果を除外しようとするよりも、エンコーディング エラーのある場所を見つけて修正するほうがよい場合があります。

于 2013-10-25T15:08:49.090 に答える
1

問題は、':','/','+','-','.',' ',' のように、文字と数字の異なる多くの文字を受け入れる必要があることです。

グループにキャラクターを追加しました。文字を許可したい場合は、文字通り角括弧に入力するだけです。

string.replaceAll("[^0-9A-Za-z\\s:,/+\\-.]", " ");

^補数演算子です。これにより、すべての非数字および非文字が空白に置き換えられます。消去しないためにさらに文字を追加する必要がある場合は、グループに文字を追加するだけです。

于 2013-10-25T15:08:39.810 に答える
0

最も簡単な正規表現パターン \WreplaceAll. 使用するだけです:

 string.replaceAll("\\W", " ");

例:

    String original= "AVE  14 DE JULHO N�130";
    String after=original.replaceAll("\\W", " ");
    System.out.println(after);

出力: AVE 14 DE JULHO N 130

于 2013-10-25T15:16:11.867 に答える