【发布时间】:2022-06-15 07:56:15
【问题描述】:
我正在尝试将一个字符串与其自身连接并从结果字符串中删除所有大写字母。
这是我的代码:
public String removeCapitals(String A) {
StringBuilder B = new StringBuilder(A+A);
int n = B.length();
for(int i=0; i<n; i++){
if(B.charAt(i)>='A' && B.charAt(i)<='Z'){
B.deleteCharAt(i);
}
}
return B.toString();
}
我收到异常说:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.AbstractStringBuilder.charAt(AbstractStringBuilder.java:237)
at java.lang.StringBuilder.charAt(StringBuilder.java:76)
at Solution.removeCapitals(Solution.java:10)
at Main.main(Main.java:190)
谁能帮我理解这个问题。
【问题讨论】:
-
n包含开始循环之前 StringBuilder 的长度。当你调用B.deleteCharAt时,StringBuilder的长度不再和n的值一样。 -
问题是您将“n”定义为 B 的长度(假设为 6),然后在循环时从 B 中删除一个或多个字符(因此其长度小于 6),但循环仍然上升到 6,因此它到达了一个点,它触及一个不再存在的索引(例如 6 本身),导致字符串越界异常
标签: java string algorithm stringbuilder stringindexoutofbounds