我正在为我的课程开发一个程序,但现在我遇到了拆分字符串和子字符串的问题。我已经使用分隔符将来自不同类的数据保存在一个字符串中,以便稍后进行拆分(/)。这部分工作正常,我得到所有的字符串,因为我应该保存在一个新的String数组中。
后来我试图在for循环中烘烤它们(String word:String array),一切似乎都很好。但我有一个问题,从字切割子串。我想得到数字(在' - '和'k'之间),但它总是抛出一个字符串索引错误,我不知道为什么。当我试图向我想要获取子串的字符串的位置干杯时,它显示它们很好但是当我尝试使用它们进行子串时它会再次抛出错误。
错误
“java.lang.RuntimeException:无法启动活动 ComponentInfo {com.example.uiuracun / com.example.uiuracun.Bill}: java.lang.StringIndexOutOfBoundsException:length = 29; regionStart = 22; regionLength = -18"
守则
package com.example.uiuracun;
import android.R.anim;
import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class Bill extends ListActivity {
// Removed extra code
private void split(String[] string) {
for (String word:string){
word.trim();
int start = 0;
int end = 0;
start = word.indexOf('-');
end = word.indexOf('k');
String c = word.substring(start, end);
}
}
}
答案 0 :(得分:1)
您的错误消息包括length=29; regionStart=22; regionLength=-18
,请注意长度为负数。
这让我相信k
字符出现在-
字符之前。由于您的代码始终排在第-
位,因此end
小于start
。
答案 1 :(得分:1)
以下是一些可以帮助您解决此异常的信息。
IndexOutOfBoundsException - 如果beginIndex为负数或endIndex 大于此String对象的长度,或者beginIndex是 大于endIndex。
我想你应该试试这个:
start = word.indexOf('-');
// tell it to start looking for the 'k' starting from the index
// of the '-' that was found.
end = word.indexOf('k', start);
String c = word.substring(start, end);