有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您需要向后迭代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处的新字符是标点符号,则不再检查它

  2. # 2 楼答案

    在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)=='?') {