从字符串中删除空格和特殊字符

时间:2014-06-26 19:32:52

标签: java android regex string replace

如何格式化字符串电话号码以删除特殊字符和空格?

该号码的格式如下(123)123 1111

我想让它看起来像这样:1231231111

到目前为止,我有这个:

phone = phone.replaceAll("\\s","");
phone = phone.replaceAll("(","");

第一行将删除空格。然后我无法删除括号。 Android工作室强调"("并抛出错误unclosed group

4 个答案:

答案 0 :(得分:14)

您可以删除除数字之外的所有内容:

phone = phone.replaceAll("[^0-9]","");

答案 1 :(得分:10)

删除所有可以使用的非数字字符

replaceAll("\\D+",""); \\ \D is negation of \d (where \d represents digit) 

如果您只想删除()空格,可以定义自己的character class

replaceAll("[\\s()]+","");

无论如何,你的问题是由于正则表达式中的某些字符是special这一事实引起的。其中有(,例如可以表示group的开头。同样地,)可以代表组的结尾。

要制作此类特殊字符文字,您需要将其转义。你可以做很多事情

  • "\\(" - 正则表达式中的标准转义
  • "[(]" - 使用字符类转义
  • "\\Q(\\E" - \Q\E创建引号 - 这意味着此区域中的正则表达式字符应被视为简单文字
  • Pattern.quote("(")) - 此方法在正则表达式编译器中使用Pattern.LITERAL标志指出正则表达式中使用的元字符是简单文字,没有任何特殊含义

答案 2 :(得分:3)

您需要转义(,因为它表示正则表达式中的元字符(组的开头)。与)相同。

phone = phone.replaceAll("\\(","");

答案 3 :(得分:0)

public static void main(String[] args){
    // TODO code application logic here
  String str = "(test)";
  String replaced= str.replaceAll("\\(", "").replaceAll("\\)", "");
  System.out.println(replaced);


}