【问题标题】:keep only alphabet characters只保留字母字符
【发布时间】:2012-04-09 22:46:58
【问题描述】:

在java中我应该遵循什么方法来产生

"WordWord"

来自

"Word#$#$% Word 1234"

【问题讨论】:

    标签: java regex string


    【解决方案1】:

    您可以将String.replaceAll(regex, replacement) 与正则表达式[^A-Za-z]+ 一起使用,如下所示:

    String newstr = "Word#$#$% Word 1234".replaceAll("[^A-Za-z]+", "");
    // newstr will become WordWord
    

    编辑: 虽然 OP 没有提到任何关于 unicode characters 的内容,但由于 @Joey 发表了评论,并且如果有保留 unicode 字符的要求,那么应该使用 \\P{L}+ 正则表达式像这样:

    String newstr = "Word#$#$% Word λ1234ä, ñ, ж".replaceAll("\\P{L}+", "");
    // newstr will become WordWordλäñж
    

    【讨论】:

    • 请注意,这也会丢弃诸如 äñжλ 之类的东西,这取决于你问的是谁,也是字母。
    • 顺便说一句,您可以将其简化为\P{L} ;-)
    • @anubhava +1 来自我.. 但是如果我也想保留这些数字怎么办?
    • @nik686:在这种情况下使用:replaceAll("[^A-Za-z0-9]+", "");
    • @anubhava 我使用自己的循环完成了它。但是非常感谢您的时间和精力.. :)
    【解决方案2】:
    public static void main(String[] args) {
        String input = "Word#$#$% Word 1234";
        String extract = input.replaceAll("[^a-zA-Z]+", "");
        System.out.println(extract);
    }
    

    输出:

    WordWord
    

    【讨论】:

    • 这会起作用,但我认为 [^a-zA-Z]+ 出于性能原因会更好,因为 [^a-zA-Z]+ 的字符串替换次数会更少。
    • @anubhava 好点。我已编辑我的答案以纳入您的建议
    【解决方案3】:

    你可以像这样在 Character 类中使用Character.isLetter(char c)

     String s = "Word#$#$% Word 1234";
     StringBuffer r = new StringBuffer();
     for (int k = 0; k < s.length(); k++) {
         if(Character.isLetter(s.charAt(k)))
            r.append(s.charAt(k));     
     }
     System.out.println("Result " + r.toString());
    

    【讨论】:

    • 我不赞成这个答案。请学习使用 SO 的 Markdown wiki 格式。当您输入或编辑任何问题/答案时,页面上有关于 Markdown 的基本帮助,以及指向更详细信息的链接。
    【解决方案4】:

    使用流:

    List<Character> letters = string.chars()
        .mapToObj(i -> (char) i)
        .filter(Character::isAlphabetic)
        .collect(Collectors.toList());
    

    【讨论】:

      【解决方案5】:

      下面的答案更易读

       String inputString = "Word#$#$% Word 1234";
              StringBuffer stringBuffer = new StringBuffer();
              for (int k = 0; k < inputString.length(); k++) {
      
      
                  if (Character.isSpaceChar(inputString.charAt(k))) {
                      stringBuffer.append(" ");
                  } else {
      
                      if (Character.isLetter(inputString.charAt(k)))
                          stringBuffer.append(inputString.charAt(k));
                  }
              }
              System.out.println("Output : " + stringBuffer.toString());
          }
      

      输出:字字

      【讨论】:

        猜你喜欢
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        相关资源
        最近更新 更多