Java 此代码中的越界异常
如果单词“bread”出现在单词的两侧,我会尝试返回字符串,例如:getSandwich(“breadjambread”)→ “果酱” 但是我写的代码总是给我越界的异常。我怎样才能解决这个问题? 这是我的密码:Java 此代码中的越界异常,java,Java,如果单词“bread”出现在单词的两侧,我会尝试返回字符串,例如:getSandwich(“breadjambread”)→ “果酱” 但是我写的代码总是给我越界的异常。我怎样才能解决这个问题? 这是我的密码: public String getSandwich(String str) { String tmp = ""; String newString = ""; for (int i = 0; i < str.length()-1; i++) { if (str.
public String getSandwich(String str) {
String tmp = "";
String newString = "";
for (int i = 0; i < str.length()-1; i++) {
if (str.length() >= 11 && str.substring(i, i+6).equals("bread")) {
tmp = str.substring(i+6);
}
if (tmp.length() > 0 && tmp.substring(i+1, i+7).equals("bread")) {
newString = tmp.substring(0, i);
}
}
return newString;
}
publicstringgetsandwich(stringstr){
字符串tmp=“”;
字符串newString=“”;
对于(int i=0;i=11&&str.substring(i,i+6).equals(“bread”)){
tmp=str.substring(i+6);
}
if(tmp.length()>0&&tmp.substring(i+1,i+7).equals(“bread”)){
newString=tmp.substring(0,i);
}
}
返回新闻字符串;
}
在代码中i
从0
变为length-1
,然后尝试获取子字符串(i,i+6)
。当i
高于length-6
时,这将导致越界异常。将循环条件更改为str.length()-6
可以解决此问题
检查循环内
长度是否高于11
看起来不正确。但当我将其更改为length()-5(这是没有越界异常时的第一个点)时,它将不起作用。那么我该如何修复它呢?@user2036340我会尝试删除str.length()>=11
检查。一个更简单的解决方案是使用str.replaceAll(“bread”),来进行替换。但是我只需要两个面包之间的字符(当有两个面包时),所以如果我只是这样做:“public String getSandwich(String str){String newString=str.replaceAll(“bread”),return newString;}“不会的work@user2036340然后可以使用str.replaceAll(“bread(.*bread?),“\\1”)。
public static String getSandwich(String str) {
String newString = "";
int i1 = str.indexOf("bread");
int i2 = str.lastIndexOf("bread");
if(i1 != i2){
newString = str.substring(i1 + 5, i2);
}
return newString;
}