さて、文字、数字、およびいくつかの「奇妙な」文字を含む文字列があります。この「奇妙な」文字を「空白」に置き換えたい。
私の元の文字列を見てください:
AVE 14 DE JULHO N�130
私はに置き換えたい:
AVE 14 DE JULHO N 130
これはほんの一例ですが、「普通のキャラクター」と「変なキャラクター」がたくさん入った大きなファイルがあります
さて、文字、数字、およびいくつかの「奇妙な」文字を含む文字列があります。この「奇妙な」文字を「空白」に置き換えたい。
私の元の文字列を見てください:
AVE 14 DE JULHO N�130
私はに置き換えたい:
AVE 14 DE JULHO N 130
これはほんの一例ですが、「普通のキャラクター」と「変なキャラクター」がたくさん入った大きなファイルがあります
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, " ");
最後の例は正の一致パターンの単なる例であり、使用する範囲を推奨するものではないことに注意してください! 特にその範囲では、ほとんどのアクセント記号が削除されます。
編集これらの「奇妙な」文字は、文字列を構築 (または使用) するプロセスのどこかで間違った文字エンコーディングを使用して解釈された、実際には適切な文字である可能性が最も高いです。エラーの結果を除外しようとするよりも、エンコーディング エラーのある場所を見つけて修正するほうがよい場合があります。
問題は、':','/','+','-','.',' ',' のように、文字と数字の異なる多くの文字を受け入れる必要があることです。
グループにキャラクターを追加しました。文字を許可したい場合は、文字通り角括弧に入力するだけです。
string.replaceAll("[^0-9A-Za-z\\s:,/+\\-.]", " ");
^
補数演算子です。これにより、すべての非数字および非文字が空白に置き換えられます。消去しないためにさらに文字を追加する必要がある場合は、グループに文字を追加するだけです。
最も簡単な正規表現パターン \W
はreplaceAll
. 使用するだけです:
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