【问题标题】:Remove spaces and special characters from string从字符串中删除空格和特殊字符
【发布时间】:2014-08-17 18:57:29
【问题描述】:

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

数字的格式是这样的 (123) 123 1111

我试图让它看起来像这样:1231231111

到目前为止,我有这个:

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

第一行将删除空格。然后我无法删除括号。 Android Studio 在"(" 下划线并抛出错误unclosed group

【问题讨论】:

    标签: java android regex string replace


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了,其他冗长的答案数量很多,其中许多根本不起作用,你简洁的答案做到了!谢谢!
    【解决方案2】:

    要删除所有非数字字符,您可以使用

    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 标志来指出正则表达式中使用的元字符是简单的文字,没有任何特殊含义

    【讨论】:

    • 但它也会删除 + ,例如如果我使用国家代码为 +1(223) 223 12112 的电话号码,它将显示 122322312112 无效!
    • @Faakhir 此答案基于 OP 要求,该要求指出 The number is formatted like this (123) 123 1111 因此它排除了代表国家代码的 +XX 部分。但是答案还包含描述如何删除 only 空格和括号的版本,因此它应该保留其他字符,例如 + : replaceAll("[\\s()]+","")。选择符合您需求的版本。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:
      public static void main(String[] args){
          // TODO code application logic here
        String str = "(test)";
        String replaced= str.replaceAll("\\(", "").replaceAll("\\)", "");
        System.out.println(replaced);
      
      
      }
      

      【讨论】:

      • 您能否详细说明您的答案? StackOverflow 上不接受仅代码的答案。
      猜你喜欢
      • 2021-10-16
      • 2021-04-23
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2011-04-11
      • 2016-01-23
      相关资源
      最近更新 更多