此代码中的超出范围异常

时间:2013-03-17 14:47:15

标签: java

如果单词“bread”出现在单词的两边,我正在尝试返回字符串,例如:getSandwich(“breadjambread”)→“jam” 但是我写的代码一直让我超出界限。我怎样才能解决这个问题? 这是我的代码:

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

2 个答案:

答案 0 :(得分:2)

在您的代码中i0转到length-1,然后尝试substring(i, i+6)。当i高于length-6时,这将导致超出范围的异常。将循环条件更改为str.length()-6应解决此问题。

检查length高于11 循环内部看起来不正确。

答案 1 :(得分:0)

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