如何从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; }
注意:这将包括字母和数字