删除标点符号的简单程序

时间:2015-01-24 23:57:32

标签: java

我对这个小程序有一个小问题。它应该使用StringBuilder实例来删除标点符号。我没有包括所有标点符号,但由于某种原因,当我编译它时,它不会删除感叹号,但它会执行其他标点符号。很奇怪。这是我的代码:

import java.lang.StringBuilder;

public class Chapter1Reinforcement8 {

public static StringBuilder removePunctuation(StringBuilder s) {
    for (int i=0; i<=s.length(); i++) {
        if(s.charAt(i)=='!' | s.charAt(i)=='\'' | s.charAt(i)=='.'| s.charAt(i)==','| s.charAt(i)=='?') {
        s.deleteCharAt(i); 
    }
}
return s;
}

public static void main(String[] args) {
    StringBuilder s = new StringBuilder("Let's get Mike, Theresa, and Sam.!?");
    System.out.println("The old sentence is: " +s);
    StringBuilder newSentence = new StringBuilder();
    newSentence = removePunctuation(s);
    System.out.println("The new sentence is: " +newSentence);

}
}

有人能在这看到这个问题吗? 谢谢!

2 个答案:

答案 0 :(得分:3)

您需要向后迭代StringBuilder

public static StringBuilder removePunctuation(StringBuilder s) {
    for (int i=s.length() - 1; i >= 0; i--) {
        if(s.charAt(i)=='!' || s.charAt(i)=='\'' || s.charAt(i)=='.'| s.charAt(i)==','|| s.charAt(i)=='?') {
        s.deleteCharAt(i); 
    }
}

如果您向前迭代,当您从位置i删除第一个标点符号时,i + 1处的字符将成为i处的新字符;然后你增加i。如果i处的新字符是标点符号,则不会再次检查。

答案 1 :(得分:1)

您需要在if条件中使用||进行OR比较而不是逻辑OR |。改变这个:

    if(s.charAt(i)=='!' | s.charAt(i)=='\'' | s.charAt(i)=='.'| s.charAt(i)==','| s.charAt(i)=='?') {

    if(s.charAt(i)=='!' || s.charAt(i)=='\'' || s.charAt(i)=='.'|| s.charAt(i)==','|| s.charAt(i)=='?') {