【发布时间】:2012-01-03 08:18:20
【问题描述】:
我有以下需要过滤的示例字符串
0173556677 (Alice), 017545454 (Bob)
这就是将电话号码添加到文本视图的方式。我希望文本看起来像那样
0173556677;017545454
有没有办法使用正则表达式更改文本。这样的表情会是什么样子?还是您推荐其他方法?
【问题讨论】:
-
看看谷歌的 libphonenumber
我有以下需要过滤的示例字符串
0173556677 (Alice), 017545454 (Bob)
这就是将电话号码添加到文本视图的方式。我希望文本看起来像那样
0173556677;017545454
有没有办法使用正则表达式更改文本。这样的表情会是什么样子?还是您推荐其他方法?
【问题讨论】:
你可以这样做:
String orig = "0173556677 (Alice), 017545454 (Bob)";
String regex = " \\(.+?\\)";
String res = orig.replaceAll(regex, "").replaceAll(",", ";");
// ^remove all content in parenthesis
// ^ replace comma with semicolon
【讨论】:
regex 变量中,有一个?。我尝试在没有? 的情况下执行代码,变量res 得到0173556677 而不是0173556677; 017545454。正则表达式意义上的? 表示可选字符。这到底是什么意思?
【讨论】:
此解决方案适用于以任何不包含数字的字符串分隔的电话号码:
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),我不想搞砸某人的代码。
【讨论】: