Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 我试图从定义的字符串中删除字符串中的字符。错误出现在这里:if(s.charAt(x)=punct.charAt(y))_Java - Fatal编程技术网

Java 我试图从定义的字符串中删除字符串中的字符。错误出现在这里:if(s.charAt(x)=punct.charAt(y))

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

我有点醉了,但看起来你在循环开始时检查了字符串的长度,然后开始从中删除字符,循环溢出了字符串的结尾。我认为您需要一个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

这很难看,因为我在一台平板电脑上,但我认为它可以工作。

我有点醉了,但看起来你在循环开始时检查了字符串的长度,然后开始从中删除字符,循环超出了字符串的结尾。我认为您需要一个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的速度