我只是想创建一个可以将自然语言转换为sql查询的应用程序,在这个片段中我想从给定的字符串中提取数字。我不知道为什么我会收到此错误。无论我输入的长度如何,都会产生相同的错误。
public void insert(String low) {
String character = low;
int l = low.length();
int j[] = new int[20];
int m = 0;
for (int k = 0; k <= 2; k++) {
for (int i = 0; i <= l; i++) {
char c = character.charAt(i);
if (Character.isDigit(c)) {
String str = Character.toString(c);
j[k] = (j[k] * 10) + Integer.parseInt(str);
m++;
} else if (Character.isLetter(c)) {
if (m > 2) {
break;
}
}
}
}
for (int k = 0; k <= 2; k++) {
jTextField2.setText(Integer.toString(j[k]));
}
}
public void check(String low) {
int j;
String[] ins = {"into", "add", "insert"};
String cc = low;
for (int i = 0; i < 2; i++) {
String dd = ins[i];
if (cc.contains(dd)) {
j = 1;
insert(cc);
break;
}
}
}
答案 0 :(得分:0)
变化
for(int i=0;i<=l;i++)
{
char c = character.charAt(i);
..........
}
到
for(int i=0;i<l;i++)
{
char c = character.charAt(i);
..........
}
当您编写i<=l
时,循环的最后一次迭代将执行character.chatAt(l)
,这不存在,因为索引从0开始,只有0,1,2, .....l-1
个字符可用。因此执行character.chatAt(l)
会引发IndexOutofBound异常,这是一种自我解释。
答案 1 :(得分:0)
如果您尝试提取字符串中的所有数字,我强烈建议您使用regular expressions而不是编写自己的代码来循环字符。这样的事情怎么样:
public List<Integer> extractNumbers(String line){
// Construct regex
Pattern digitsPattern = Pattern.compile("\\d+");
Matcher m = digitsPattern.matcher(line);
// Compile into list
List<Integer> numberList = new ArrayList<Integer>();
while (m.find()){
numberList.add(Integer.parseInt(m.group()));
}
return numberList;
}
正则表达式非常强大,成熟和优雅 - 正如您在此处所看到的,您可以通过几个相当简单的行来完成此操作,如果您需要更改匹配规则,您将会有一个更简单的工作