如何从Javainput文本中删除标点符号?

我正在尝试使用Java中的用户input来获取一个句子,并且我需要使它成为小写字母并删除所有标点符号。 这是我的代码:

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; 

我似乎无法find任何方法来删除所有非字母字符。 我曾尝试使用正则expression式和迭代器没有运气。 谢谢你的帮助。

首先删除所有非字母字符,折叠为小写,然后拆分input,在一行中完成所有工作:

 String[] words = instring.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+"); 

input中最初留有空格,因此拆分仍然有效。

通过分割之前删除垃圾字符,避免了循环遍历元素。

你可以试试这个:

 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]匹配一个非单词字符,所以上面的正则expression式将匹配并删除所有非单词字符。

如果你不想使用正则expression式(这在你的问题上似乎是非常不必要的),也许你应该尝试这样的事情:

 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(); } 

它通过String的底层char[]进行循环,如果是字母或数字(只是过滤掉所有符号,我正在设想的是您正在尝试完成的),则只附加char ,然后附加小写版本的char

我不喜欢使用正则expression式,所以这里是另一个简单的解决scheme。

 public String removePunctuations(String s) { String res = ""; for (Character c : s.toCharArray()) { if(Character.isLetterOrDigit(c)) res += c; } return res; } 

注意:这将包括字母和数字