Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除标点符号的简单程序_Java - Fatal编程技术网

Java 删除标点符号的简单程序

Java 删除标点符号的简单程序,java,Java,我对这个小程序有个小问题。应该使用StringBuilder实例删除标点符号。我没有包括所有的标点符号,但出于某种原因,当我编译这篇文章时,它并没有删除感叹号,而是删除了其他的。很奇怪。这是我的密码: import java.lang.StringBuilder; public class Chapter1Reinforcement8 { public static StringBuilder removePunctuation(StringBuilder s) { for (int

我对这个小程序有个小问题。应该使用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);

}
}
导入java.lang.StringBuilder;
公共课第1章执法8{
公共静态StringBuilder移除标点符号(StringBuilder s){

对于(int i=0;i您需要在if条件下使用
|
进行OR比较,而不是使用逻辑OR
|
。更改此项:

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


您需要在if条件下使用
|
进行OR比较,而不是使用逻辑OR
|
。更改此条件:

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


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

您需要迭代
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
的新字符是标点符号,则不必再次检查。

我只需使用
String.replaceAll(“[!',]“,”)
。除了Juned的答案之外,还有一个Java中的运算符列表。当您应该使用逻辑OR时,您正在使用位OR。还有两个问题:1)您需要反向迭代StringBuilder,否则您将跳过连续标点;2)for循环条件应该是我只使用
String.replaceAll(“[!”)“,”)
。除了Juned的答案外,还有一个Java中的运算符列表。当您应该使用逻辑OR时,您使用的是按位OR。还有两个问题:1)您需要反向迭代StringBuilder,否则将跳过连续标点;2)如果您说“应该使用”而不是“需要使用”,则for循环条件应为您可能是对的,但这并不能回答问题。使用短路运算符不会改变结果。如果您说“应该使用”而不是“需要使用,”您可能是对的,但这并不能回答问题。使用短路运算符不会改变结果。谢谢您,这完全有道理!谢谢您,这完全有道理!