仅保留字母字符

36

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

"WordWord"

来自

"Word#$#$% Word 1234"
5个回答

85
你可以使用 String.replaceAll(regex, replacement) 方法,使用正则表达式 [^A-Za-z]+,实现如下:
String newstr = "Word#$#$% Word 1234".replaceAll("[^A-Za-z]+", "");
// newstr will become WordWord

编辑:尽管OP没有提及任何关于unicode字符的事情,但由于@Joey已经发表了评论,如果需要保留unicode字符,则应该像这样使用\\P{L}+正则表达式:

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

6
请注意,这将抛弃像äñжλ这样的内容,而这些内容根据不同的人看法,也可能是字母。 - Joey
3
顺便说一下,您可以将其简化为\P{L}。;-) - Joey
1
@anubhava 我也给你点赞。但是如果我想保留数字怎么办? - nik686
2
在这种情况下,请使用:replaceAll("[^A-Za-z0-9]+", ""); - anubhava
1
@anubhava 我已经使用自己的循环完成了。但非常感谢您的时间和精力.. :) - Bugs Happen
显示剩余6条评论

10
public static void main(String[] args) {
    String input = "Word#$#$% Word 1234";
    String extract = input.replaceAll("[^a-zA-Z]+", "");
    System.out.println(extract);
}

输出:

WordWord

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

4
您可以像这样在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());

1
请不要为此回答点赞。请学习使用SO的Markdown wiki格式。在输入或编辑任何问题/答案时,页面上都有关于Markdown的基本帮助,并提供更详细信息的链接。 - Stephen C

0
以下答案以更易读的形式呈现。
 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());
    }

输出:单词 单词


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接