我有一个名为TelephoneName的数据库字段。在这个领域,我得到了不同格式的电话号码。
我现在需要的是将它们分成国家代码和用户号码。
例如,我看到了一个电话号码+49(0)711/61947-xx。
我想删除所有斜杠,括号,减号,空格。结果可能是+49(国家代码)和071161947 **(subsribernumber)。
我如何使用replaceAll方法做到这一点?
replaceAll("//()-","")
是正确的吗?
事情是我收到了很多未格式化的电话号码,例如: +49 04261 85120 32027400050 使用相同的算法应用每个电话号码是不同的
答案 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(")","");
然后将其子串以获取国家/地区代码。