Java String.replaceAll用于清理电话号码的方法

时间:2011-10-24 10:07:30

标签: java string replaceall

我有一个名为TelephoneName的数据库字段。在这个领域,我得到了不同格式的电话号码。

我现在需要的是将它们分成国家代码和用户号码。

例如,我看到了一个电话号码+49(0)711/61947-xx。

我想删除所有斜杠,括号,减号,空格。结果可能是+49(国家代码)和071161947 **(subsribernumber)。

我如何使用replaceAll方法做到这一点?

replaceAll("//()-","")是正确的吗?

事情是我收到了很多未格式化的电话号码,例如: +49 04261 85120 32027400050 使用相同的算法应用每个电话号码是不同的

4 个答案:

答案 0 :(得分:7)

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("[/()-]", "")(并且/不需要转义)。

答案 1 :(得分:2)

replaceAll()的第一个参数是一个正则表达式模式,所以你想要做的是使它匹配所有非数字(和+)。您可以使用“[^ ...]”(不是......之一)构造:

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

答案 2 :(得分:0)

不,这不起作用。

ReplaceAll() Replaces each substring of this string that matches the given regular expression with the given replacement.

因此,您的表达式将使用空格替换看起来像/()'的数字中的所有实例。

您需要执行类似

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

方括号使它成为一个正则表达式字符类('斜线或开括号或近括号或泛'),而不是文字('斜线后跟开括号,后跟紧括号后跟爆炸'。)。 / p>

答案 3 :(得分:-1)

这可以通过以下方式完成:

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

然后将其子串以获取国家/地区代码。