我正在学习Java,我不知道这里有什么问题.为什么会发生这种错误?我没有看到任何错误,直到我在第二个"for"循环之前写入"count = 0"行时才实际工作.
这是错误:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:1
这就是错误发生的地方:
if(mots.get(j).startsWith(searchPhrase.substring(0,1))){
Run Code Online (Sandbox Code Playgroud)
这是整个代码:
import java.util.*;
public class Test {
public static void main(String[] args) {
List<String> mots = new ArrayList<>();
List<String> saida = new ArrayList<>();
mots.add("un");
mots.add("deux");
mots.add("trois");
String searchPhrase = "aaasdeuxctsundesle";
int count = 0;
int countAnula = 0;
int azul = 0;
String anula = "-"; //Tem que fazer cast para char depois
String frase = searchPhrase;
for (int i = 0; i < frase.length(); i++) {
count = 0;
for (int j = 0; j < mots.size(); j++) {
if (mots.get(j).startsWith(searchPhrase.substring(0,1))) {
for (int t = 0; t < mots.get(j).length(); t++) {
if (searchPhrase.charAt(t) == mots.get(j).charAt(t)) {
azul ++;
} else {
break;
}
}
if (azul == mots.get(j).length()) {
saida.add(mots.get(j));
searchPhrase = searchPhrase.substring(mots.get(j).length());
j = 0;
azul = 0;
} else {
searchPhrase = searchPhrase.substring(1);
saida.add(anula);
j = 0;
azul = 0;
}
} else {
count ++;
}
}
if (count == mots.size()) {
searchPhrase = searchPhrase.substring(1);
saida.add(anula);
count = 0;
}
}
for (int g = 0; g < saida.size(); g++) {
System.out.println(saida.get(g));
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先,祝贺Java入门.这是一种令人惊叹的语言,可能性无穷无尽.以下是修复错误的方法.
第一步是准确理解你的错误意味着什么,所以让我们开始吧!
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
抛出的异常类型是StringIndexOutOfBoundsException.无论何时获得IndexOutOfBoundsException(或其任何类型),都意味着您正在尝试访问不存在的数组中的索引.通过调用该substring方法,您将字符串数组中的字符串分开,并选择字符A到B(在您的情况下为0到1).如果字符1不存在,但您尝试访问它,则会抛出此错误.
因此,您获得此错误的原因是您尝试substring(0,1)在少于1个字符的字符串上执行a ,也就是空字符串甚至是空字符串.
另外,给你一个快速提示.通常,如果方法体扩展了12行,则应该创建一个新方法.这将极大地提高代码的可读性.我花了一段时间才找到适合您修复的地方:-)
更改
if (mots.get(j).startsWith(searchPhrase.substring(0, 1))) {
Run Code Online (Sandbox Code Playgroud)
至
if (searchPhrase != null && searchPhrase.length() > 0 && mots.get(j).startsWith(searchPhrase.substring(0, 1))) {
Run Code Online (Sandbox Code Playgroud)
通过执行此操作,您可以在执行substring方法之前检查字符串的长度是否足够
| 归档时间: |
|
| 查看次数: |
34115 次 |
| 最近记录: |