我正在尝试使用Java中用户的输入来获取句子,我需要将其设为小写并删除所有标点符号。这是我的代码:
String[] words = instring.split("\\s+");
for (int i = 0; i < words.length; i++) {
words[i] = words[i].toLowerCase();
}
String[] wordsout = new String[50];
Arrays.fill(wordsout,"");
int e = 0;
for (int i = 0; i < words.length; i++) {
if (words[i] != "") {
wordsout[e] = words[e];
wordsout[e] = wordsout[e].replaceAll(" ", "");
e++;
}
}
return wordsout;
我似乎无法找到任何方法来删除所有非字母字符。我试过使用正则表达式和迭代器没有运气。谢谢你的帮助。
答案 0 :(得分:94)
首先删除所有非字母字符,折叠为小写,然后拆分输入,在一行中完成所有工作:
String[] words = instring.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");
空格最初留在输入中,因此拆分仍然有效。
通过在拆分之前移除垃圾字符,您可以避免遍历元素。
答案 1 :(得分:6)
您可以使用以下regular expression construct
标点:其中一个!&#34;#$%&amp;&#39;()* +, - 。/ :;&lt; =&gt;?@ [] ^ _` {|}〜
inputString.replaceAll("\\p{Punct}", "");
答案 2 :(得分:4)
你可以试试这个: -
Scanner scan = new Scanner(System.in);
System.out.println("Type a sentence and press enter.");
String input = scan.nextLine();
String strippedInput = input.replaceAll("\\W", "");
System.out.println("Your string: " + strippedInput);
[^\w]
匹配非单词字符,因此上述正则表达式将匹配并删除所有非单词字符。
答案 3 :(得分:3)
如果您不想使用RegEx(考虑到您的问题,这似乎非常不必要),也许您应该尝试这样的事情:
public String modified(final String input){
final StringBuilder builder = new StringBuilder();
for(final char c : input.toCharArray())
if(Character.isLetterOrDigit(c))
builder.append(Character.isLowerCase(c) ? c : Character.toLowerCase(c));
return builder.toString();
}
它循环遍历char[]
中的基础String
,如果它是一个字母或数字,则只附加char
(过滤掉所有符号,我假设你是你的试图完成),然后附加char
的小写版本。
答案 4 :(得分:-1)
我不喜欢使用正则表达式,所以这是另一个简单的解决方案。
public String removePunctuations(String s) {
String res = "";
for (Character c : s.toCharArray()) {
if(Character.isLetterOrDigit(c))
res += c;
}
return res;
}
注意:这将包括字母和数字