Java正则表达式来过滤电话号码

时间:2012-01-03 08:18:21

标签: java android regex

我有以下需要过滤的示例字符串

0173556677 (Alice), 017545454 (Bob)

这是将电话号码添加到文本视图的方式。我希望文本看起来像那样

0173556677;017545454

有没有办法使用正则表达式更改文本。这样的表达怎么样?或者你推荐其他方法吗?

4 个答案:

答案 0 :(得分:4)

您可以执行以下操作:

String orig = "0173556677 (Alice), 017545454 (Bob)";
String regex = " \\(.+?\\)"; 
String res = orig.replaceAll(regex, "").replaceAll(",", ";");
//                           ^remove all content in parenthesis
//                                                 ^ replace comma with semicolon

答案 1 :(得分:1)

使用android.util.Patterns

中的表达式

访问静态变量

Patterns.PHONE

或使用此表达式here(Android源代码)

答案 2 :(得分:0)

答案 3 :(得分:0)

此解决方案适用于使用不包含数字的任何字符串分隔的电话号码:

String orig = "0173556677 (Alice), 017545454 (Bob)";    
String[] numbers = orig.split("\\D+"); //split at everything that is not a digit 
StringBuilder sb = new StringBuilder();
if (numbers.length > 0) {
    sb.append(numbers[0]);
    for (int i = 1; i < numbers.length; i++) { //concatenate all that is left
        sb.append(";");
        sb.append(numbers[i]);
    }
}
String res = sb.toString();

或使用com.google.common.base.Joiner:

String[] numbers = orig.split("\\D+"); //split at everything that is not a digit 
String res = Joiner.on(";").join(numbers);

PS。最佳投票示例中的要求略有偏差,但似乎我不能只添加一个字符(应该是replaceAll(", ", ";"),在昏迷后有一个空格,或者\\s)我做的不想弄乱别人的代码。