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() 的第一个参数是一个正则表达式模式,所以你想要做的是让它匹配所有非数字(和 +)。您可以使用“[^...]”(不是...之一)构造来执行此操作:

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

This can be done simply by using :

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

Then substring it to get country code.

于 2011-10-24T10:16:06.127 回答