Java 删除标点符号的简单程序
我对这个小程序有个小问题。应该使用StringBuilder实例删除标点符号。我没有包括所有的标点符号,但出于某种原因,当我编译这篇文章时,它并没有删除感叹号,而是删除了其他的。很奇怪。这是我的密码:Java 删除标点符号的简单程序,java,Java,我对这个小程序有个小问题。应该使用StringBuilder实例删除标点符号。我没有包括所有的标点符号,但出于某种原因,当我编译这篇文章时,它并没有删除感叹号,而是删除了其他的。很奇怪。这是我的密码: import java.lang.StringBuilder; public class Chapter1Reinforcement8 { public static StringBuilder removePunctuation(StringBuilder s) { for (int
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循环条件应为您可能是对的,但这并不能回答问题。使用短路运算符不会改变结果。如果您说“应该使用”而不是“需要使用,”您可能是对的,但这并不能回答问题。使用短路运算符不会改变结果。谢谢您,这完全有道理!谢谢您,这完全有道理!