Java 此代码中的越界异常

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.

如果单词“bread”出现在单词的两侧,我会尝试返回字符串,例如:getSandwich(“breadjambread”)→ “果酱” 但是我写的代码总是给我越界的异常。我怎样才能解决这个问题? 这是我的密码:

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;
}