2

私はTelephoneNameというデータベースフィールドを持っています。このフィールドでは、さまざまな形式の電話番号を取得しました。

今必要なのは、それらを国コードと加入者番号に分けることです。

たとえば、電話番号 +49 (0)711 / 61947-xx を見ました。

スラッシュ、ブラケット、マイナス、スペースをすべて削除したい。結果は、+49 (国コード) および 071161947** (加入者番号) になります。

replaceAll メソッドでそれを行うにはどうすればよいですか?

replaceAll("//()-","")あれは正しいですか?

+49 04261 85120 +32027400050 のようなフォーマットされていない電話番号がたくさんあります 同じアルゴリズムですべての電話番号を適用するのは異なります

4

4 に答える 4

8

このreplaceAllメソッドは、正規表現を引数として取ります。数字と 以外のすべてを削除するに+は、次のようにします。

str = str.replaceAll("[^0-9+]", "")

(以下は、(シンボルのインデックスに基づいて) 国コードも計算する、より完全な例です。

String str = "+49 (0)711 / 61947-12";

int lpar = str.indexOf('(');
String countryCode = str.substring(0, lpar).trim();
String subscriber  = str.substring(lpar).trim();

subscriber = subscriber.replaceAll("[^0-9]", "");

System.out.println(countryCode);  // prints +49
System.out.println(subscriber);   // prints 07116194712

replaceAll("//()-","")あれは正しいですか?

いいえ、そうではありません。これにより、すべての部分文字列が削除されます//-。これらの文字[...]を削除するには、次のように に入れる必要がありますreplaceAll("[/()-]", "")(/エスケープする必要はありません)。

于 2011-10-24T10:10:22.313 に答える
2

replaceAll() の最初の引数は正規表現パターンなので、やりたいことは、すべての非数字 (および +) に一致させることです。"[^...]" (not one of...) コンストラクトを使用してこれを行うことができます:

mystring.replaceAll("[^0-9+]", "")
于 2011-10-24T10:13:02.203 に答える
0

いいえ、うまくいきません。

ReplaceAll() 指定された正規表現に一致するこの文字列の各部分文字列を、指定された置換で置き換えます。

したがって、あなたの式は、数字のように見えるすべてのインスタンスを/()'空のスペースに置き換えます。

次のようなことをする必要があります

String output = "+49 (0)711 / 61947-xx".replaceAll("[//()-]","");

角かっこは、リテラル (「スラッシュの後に開きかっこが続き、閉じかっこが続き、その後にハイフンが続く」) ではなく、正規表現文字クラス (「スラッシュまたは開きかっこまたは閉じかっこまたはハイフンのいずれか」) になります。

于 2011-10-24T10:13:46.943 に答える
-1

これは、以下を使用するだけで実行できます。

s=s.replace("/","");
s=s.replace("(","");
s=s.replace(")","");

次に、それをサブストリングして国コードを取得します。

于 2011-10-24T10:16:06.127 に答える