如何在Java中删除输入文本中的标点符号?
我正在尝试使用Java中用户的输入获取一个句子,我需要将其小写并删除所有标点符号。这是我的密码:如何在Java中删除输入文本中的标点符号?,java,regex,string,formatting,Java,Regex,String,Formatting,我正在尝试使用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(wor
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;
String[]words=instring.split(\\s+);
for(int i=0;i
我似乎找不到任何方法删除所有非字母字符。我尝试过使用正则表达式和迭代器,但运气不佳。谢谢您的帮助。您可以尝试以下方法:-
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]
匹配一个非单词字符,因此上面的正则表达式将匹配并删除所有非单词字符。如果您不想使用正则表达式(考虑到您的问题,这似乎非常不必要),也许您应该尝试以下方法:
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[]
,如果是字母或数字,则只追加char
(过滤掉所有符号,我假设这就是您要完成的)然后附加小写版本的字符
这首先删除所有非字母字符,折叠为小写,然后拆分输入,在一行中完成所有工作:
String[] words = instring.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");
空间最初保留在输入中,因此拆分仍然有效
通过在拆分之前删除垃圾字符,您可以避免在元素之间循环。我不喜欢使用正则表达式,因此这里是另一个简单的解决方案
public String removePunctuations(String s) {
String res = "";
for (Character c : s.toCharArray()) {
if(Character.isLetterOrDigit(c))
res += c;
}
return res;
}
注意:这将包括字母和数字您可以使用以下内容
标点符号:其中之一!“#$%&'()*+,-./:?@[]^{124;}~
这不会替换数字。我想这属于非字母。@RohitJain:-是的,我明白你的意思。但我认为我们在语言中经常使用的标点符号。我理解标点符号的字面意思!!!@RohitJain是的,我确实想删除数字。很抱歉。如果目标是删除标点符号,我不会replaceAll(\\p{p},“)
更有意义吗?“å”是一个字母吗?因为该字符将被删除。@hendy yes,“å”是一个Unicode“字母”。我回答的是拉丁语上下文。为了适应任何字母,正则表达式将是“[^\\p{L}]”
,它使用POSIX符号表示“字母”。我想知道Unicode意识是否应该是一种“默认做法”“对于大多数/刚开始的程序员?我的意思是,美国/印尼的程序员在他们的“真实”生活中从来不需要处理奇怪的角色。所以他们的代码可能反映了这一点,所以即使他们使用UTF8,也会无意中假设字母是A-Z。土耳其或阿拉伯程序员OTOH会首先认识到这种情况,并寻求Unicode解决方案。你怎么认为?(这只是旁白)@ilija139当然-在第一步中删除所有非字母/空格。要保留数字,只需在保留的字符中添加数字即可-即更改为replaceAll(“[^a-zA-Z0-9]”,“”)
inputString.replaceAll("\\p{Punct}", "");