package unl.cse.strings;
import java.lang.Character;
import java.lang.String;
public class StringUtils {
public static int longestCommonPrefix(String a, String b){
int sizeOfResult=0;
int size=0;
int i=0;
if (a.length() == 0 || b.length() == 0 ){
return sizeOfResult;
} else if (a.length()>b.length()){
size = a.length();
} else {
size = b.length();
}
for(i=0; i<size; i++){
if(a.charAt(i) != b.charAt(i)){
break;
}
sizeOfResult++;
}
return sizeOfResult;
}
public static String removeBlanks(String s){
StringBuilder sb = new StringBuilder();
for(int i=0; i<s.length(); i++) {
if(!Character.isWhitespace(s.charAt(i))) {
sb.append(s.charAt(i));
}
}
return sb.toString();
}
public static String flipCase(String s){
StringBuilder sb = new StringBuilder();
int i = 0;
for (i=0;i<s.length();i++) {
if (Character.isLetter(s.charAt(i))) {
if (Character.isUpperCase(s.charAt(i))){
sb.append(Character.toLowerCase(s.charAt(i)));
}
if (Character.isLowerCase(s.charAt(i))) {
sb.append(Character.toUpperCase(s.charAt(i)));
}
}
else {
sb.append(Character.toUpperCase(s.charAt(i)));
}
}
return sb.toString();
}
}
当我编译程序时,我得到了:
测试longestCommonPrefix(glossary,gloss)...线程中的异常 “main”java.lang.StringIndexOutOfBoundsException:字符串索引 范围:5在java.lang.String.charAt(String.java:658)at unl.cse.strings.StringUtils.longestCommonPrefix(StringUtils.java:17) 在 unl.cse.strings.StringUtilsGrader.testLCP(StringUtilsGrader.java:15) at unl.cse.strings.StringUtilsGrader.main(StringUtilsGrader.java:78) 警告:进程退出时带有(n)未知(1)错误代码
我不确定我在哪里尝试访问超出范围的字符串部分。
答案 0 :(得分:2)
您将size
设置为等于两个长度的更长,但您应该使用两者中的更短。
//...
} else if (a.length()>b.length()){
size = a.length();
//...
这肯定会导致一个越界异常(你现在这样做的方式):
} for(i=0; i<size; i++){
if(a.charAt(i) != b.charAt(i)){
答案 1 :(得分:0)
您可以按照以下条款更改条件Execption将继续执行。
else if (a.length() < b.length()) {
size = a.length();
}