Java 我试图从定义的字符串中删除字符串中的字符。错误出现在这里:if(s.charAt(x)=punct.charAt(y))
我有点醉了,但看起来你在循环开始时检查了字符串的长度,然后开始从中删除字符,循环溢出了字符串的结尾。我认为您需要一个while循环,以便在每次迭代之前检查索引是否在范围内Java 我试图从定义的字符串中删除字符串中的字符。错误出现在这里:if(s.charAt(x)=punct.charAt(y)),java,Java,我有点醉了,但看起来你在循环开始时检查了字符串的长度,然后开始从中删除字符,循环溢出了字符串的结尾。我认为您需要一个while循环,以便在每次迭代之前检查索引是否在范围内 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 28 at java.lang.String.charAt(String.java:658) at StringMet
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 28
at java.lang.String.charAt(String.java:658)
at StringMethods_7_Gupta.scrub(StringMethods_7_Gupta.java:120)
at StringMethods_7_Gupta.main(StringMethods_7_Gupta.java:95)
intx=0;
而(x
这很难看,因为我在一台平板电脑上,但我认为它可以工作。我有点醉了,但看起来你在循环开始时检查了字符串的长度,然后开始从中删除字符,循环超出了字符串的结尾。我认为您需要一个while循环,以便在每次迭代之前检查索引是否在范围内
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 28
at java.lang.String.charAt(String.java:658)
at StringMethods_7_Gupta.scrub(StringMethods_7_Gupta.java:120)
at StringMethods_7_Gupta.main(StringMethods_7_Gupta.java:95)
intx=0;
而(x
这很难看,因为我在平板电脑上,但我认为它可以工作。您正在用较短的
s
替换s,但仍然尝试转到原始字符串的末尾。您还将丢失连续的标点符号,因为您将跳过它们。每次获得匹配项时,您都需要重新启动x
循环。您将s
替换为较短的s
,但仍尝试转到原始字符串的末尾。您还将丢失连续的标点符号,因为您将跳过它们。每次获得匹配项时,都需要重新启动x
循环。您没有跟踪s.length()
它在每次替换字符时都会更改。在从循环计数器中减去1以检查替换位置的新字符以避免跳过连续标点符号后,替换字符时只需中断循环
int x = 0;
while(x < s.length())
{
for(int y = 0; y < punct.length(); y++)
{
if(s.charAt(x) == punct.charAt(y))
{
s = s.replace("" + s.charAt(x), "");
}
}
x++;
}
您没有跟踪s.length()
它在每次替换字符时都会发生变化。在从循环计数器中减去1以检查替换位置的新字符以避免跳过连续标点符号后,替换字符时只需中断循环
int x = 0;
while(x < s.length())
{
for(int y = 0; y < punct.length(); y++)
{
if(s.charAt(x) == punct.charAt(y))
{
s = s.replace("" + s.charAt(x), "");
}
}
x++;
}
那么这个呢,在变量中保持s的长度,然后每次删除s中的一个字符时,将s减少1,长度也减少1。
应该是这样的:
System.out.println(dirtyStr.replaceAll("[.,?!:;\"(){}{}<>]",""));
int aLength=s.length();
对于(intx=0;x
这样如何,将s的长度保留在变量中,然后每次删除s中的字符时,将s减少1,长度也减少1。
应该是这样的:
System.out.println(dirtyStr.replaceAll("[.,?!:;\"(){}{}<>]",""));
int aLength=s.length();
对于(intx=0;x
您只需要一行:
int aLength = s.length();
for(int x = 0; x < aLength; x++)
{
for(int y = 0; y < punct.length(); y++)
{
if(s.charAt(x) == punct.charAt(y))
{
s = s.replace("" + s.charAt(x), "");
x--;
aLength--;
}
}
}
return s;
公共静态字符串清理(字符串s){
返回s.replaceAll(“[,?!:;\”({}\\[\\]]”,“”);
}
如果{}
,我还更正了重复,假设您打算包括[]
您只需要一行:
int aLength = s.length();
for(int x = 0; x < aLength; x++)
{
for(int y = 0; y < punct.length(); y++)
{
if(s.charAt(x) == punct.charAt(y))
{
s = s.replace("" + s.charAt(x), "");
x--;
aLength--;
}
}
}
return s;
公共静态字符串清理(字符串s){
返回s.replaceAll(“[,?!:;\”({}\\[\\]]”,“”);
}
如果{}
,我还更正了重复,假设您打算包括[]
,这仍然不起作用,尽管它避免了异常;外部计数循环将跳过连续的标点符号。这仍然不起作用,尽管它避免了异常;外部计数循环将跳过连续的标点符号。您可能希望以另一种方式进行此操作,例如在原始字符串中循环,并且仅向新字符串添加非标点符号字符。您可以使用字符串生成器加快上传到regex replace的速度。您可能希望以不同的方式实现这一点,例如在原始字符串中循环,并且只向新字符串添加非标点字符。您可以使用字符串生成器加快上传到regex replace的速度