【问题标题】:Java: Remove numbers from stringJava:从字符串中删除数字
【发布时间】:2017-05-21 04:14:11
【问题描述】:

我有一个类似23.Piano+trompet 的字符串,我想使用这个函数从字符串中删除23. 部分:

private String removeSignsFromName(String name) {
    name = name.replaceAll(" ", "");
    name = name.replaceAll(".", "");

    return name.replaceAll("\\^([0-9]+)", "");
}

但它不这样做。另外,运行时没有错误。

【问题讨论】:

  • 您转义了^,因此它会搜索不存在的文字^
  • . 匹配任何字符,replaceAll() 替换所有字符。转义点"\\."

标签: java regex string replaceall


【解决方案1】:

以下内容将所有空白字符 (\\s)、点 (\\.) 和数字 (\\d) 替换为 ""

name.replaceAll("^[\\s\\.\\d]+", "");

如果我想用_ 替换+ 怎么办?

name.replaceAll("^[\\s\\.\\d]+", "").replaceAll("\\+", "_");

【讨论】:

    【解决方案2】:

    您不需要转义^,可以使用\\d+ 匹配多个数字,使用\\. 匹配文字点,并且不需要多次调用replaceAll。例如,

    private static String removeSignsFromName(String name) {
        return name.replaceAll("^\\d+\\.", "");
    }
    

    我测试的类似

    public static void main(String[] args) {
        System.out.println(removeSignsFromName("23.Piano+trompet"));
    }
    

    得到了

    Piano+trompet
    

    【讨论】:

    • 他需要^,如果他想确保替换只能发生在字符串的开头。但是他不应该逃避^ 您的模式将替换文本中的所有number + dots,不知道是否需要。另外,分组怎么办,没有意义吧?
    【解决方案3】:

    两个问题:

    1. .在第二个 replaceAll 应该转义:

      name=name.replaceAll("\\.", "");
      
    2. 第三个中的 ^ 不应转义:

      return name.replaceAll("^([0-9]+)", "");
      

    哦!并且括号没有用,因为您不使用捕获的字符串。

    【讨论】:

      【解决方案4】:

      这个怎么样:

      public static String removeNumOfStr(String str) {
          if (str == null) {
              return null;
          }
          char[] ch = str.toCharArray();
          int length = ch.length;
          StringBuilder sb = new StringBuilder();
          int i = 0;
          while (i < length) {
              if (Character.isDigit(ch[i])) {
                  i++;
              } else {
                  sb.append(ch[i]);
                  i++;
              }
          }
          return sb.toString();
      }
      

      【讨论】:

        【解决方案5】:
        return name.replaceFirst("^\\d+\\.", "");
        

        【讨论】:

          【解决方案6】:
          public static void removenum(String str){
          
              char[] arr=str.toCharArray();
              String s="";
          
              for(char ch:arr){
          
                  if(!(ch>47 & ch<57)){
          
                      s=s+ch;
                  }
                      }
              System.out.println(s);
          
          }
          

          【讨论】:

            猜你喜欢
            • 2013-07-05
            • 2011-08-07
            • 2010-10-10
            • 1970-01-01
            • 2015-05-13
            • 1970-01-01
            • 2013-08-20
            • 2012-06-05
            • 2013-06-24
            相关资源
            最近更新 更多