【发布时间】:2012-04-09 22:46:58
【问题描述】:
在java中我应该遵循什么方法来产生
"WordWord"
来自
"Word#$#$% Word 1234"
【问题讨论】:
在java中我应该遵循什么方法来产生
"WordWord"
来自
"Word#$#$% Word 1234"
【问题讨论】:
您可以将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} ;-)
replaceAll("[^A-Za-z0-9]+", "");
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]+ 的字符串替换次数会更少。
你可以像这样在 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());
【讨论】:
使用流:
List<Character> letters = string.chars()
.mapToObj(i -> (char) i)
.filter(Character::isAlphabetic)
.collect(Collectors.toList());
【讨论】:
下面的答案更易读
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());
}
输出:字字
【讨论】: