gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:21:10 28 4
gpt4 key购买 nike

String dirtyStr = "Who. do yo$u th,ink you    are?!";
System.out.println(scrub(dirtyStr));
static String punct = ".,?!:;\"(){}{}<>";
public static String scrub(String s)
{
for(int x = 0; x < s.length(); x++)
{
for(int y = 0; y < punct.length(); y++)
{
if(s.charAt(x) == punct.charAt(y))
{
s = s.replace("" + s.charAt(x), "");
}
}
}
return s;
}

堆栈跟踪

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)

最佳答案

您没有跟踪您的s.length(),它会在您每次替换字符时发生变化。当你替换一个字符时,从循环计数器减 1 后跳出循环,检查替换位置的新字符,以避免跳过连续的标点符号。

String dirtyStr = "Who. do yo$u th,ink you    are?!";
System.out.println(scrub(dirtyStr));

static String punct = ".,?!:;\"(){}{}<>";

public static String scrub(String s)
{
for(int x = 0; x < s.length(); x++)
{
for(int y = 0; y < punct.length(); y++)
{
if(s.charAt(x) == punct.charAt(y))
{
s = s.replace("" + s.charAt(x), "");
x--;
break;
}
}
}
return s;
}

如果您正在考虑更改实现,则只需使用正则表达式即可通过调用 replaceAll() 方法来替换所有标点符号。

System.out.println(dirtyStr.replaceAll("[.,?!:;\"(){}{}<>]",""));

关于java - 我正在尝试从定义的字符串中删除字符串中的字符。错误出现在这里 : if(s. charAt(x) == punct.charAt(y)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18691029/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com