只保留字母字符

ssr*_*srp 27 java string

我应该在java中使用什么方法来生成

"WordWord"
Run Code Online (Sandbox Code Playgroud)

"Word#$#$% Word 1234"
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 68

您可以像这样使用String.replaceAll(regex, replacement)正则表达式[^A-Za-z]+:

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

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

String newstr = "Word#$#$% Word ?1234ä, ñ, ?".replaceAll("\\P{L}+", "");
// newstr will become WordWord?äñ?
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这也会抛出诸如"ä`","ñ","ж"或"λ"之类的东西,这取决于你问的是谁,也是字母. (6认同)
  • 对unicode使用:`replaceAll("[^ \\ p {L} \\ p {N}] +","") (4认同)
  • 你可以把它简化为`\ P {L}`顺便说一下;-) (3认同)
  • @ nik686:在这种情况下使用:`replaceAll("[^ A-Za-z0-9] +","");` (2认同)

Boh*_*ian 9

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

输出:

WordWord
Run Code Online (Sandbox Code Playgroud)

  • 这会起作用,但我认为出于性能原因,`[^a-zA-Z]+` 更好,因为用 `[^a-zA-Z]+` 替换的字符串数量会更少。 (2认同)
  • @anubhava 好点。我已经编辑了我的答案以纳入您的建议 (2认同)

Jdr*_*uwe 6

使用流:

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