在搜索预先填充的ArrayList时,将其命名为
List<String> myList= new ArrayList<String>();
我正在尝试根据包含某些正则表达式值的这些元素向其添加新元素。当我只需要返回元素的一个子串时,我就取得了成功。例如,如果我有
String removable = "X";
驻留在一个元素中,称之为
ABCDX
可以轻松删除X并使用代码
将其添加到ArrayList中 if(myList.get(i).length() == 5 && myList.get(i).substring(4,5).contains(removable))
{
myList.add(i+1, myList.get(i).substring(0, 4));
}
但是当我有一个像
这样的元素时ABXCD ,
我认为可以用
处理 if(myList.get(i).length() == 5 && myList.get(i).substring(2,3).contains(removable))
{
myList.add(i+1, myList.get(i).substring(0, 2).substring(3, 5));
}
我得到一个超出界限的字符串索引。怎么能纠正这个?
答案 0 :(得分:1)
在您的第二个代码示例中,您正在使用
abc1List.get(i)
这应该不是
myList.get(i)
修改强>
我相信你的问题是你是子串的子串。您的代码执行此操作
myList.get(i).substring(0, 2).substring(3, 5)
所以说的是,获取字符串的子字符串,然后获取先前检索的子字符串的子字符串。由于第一个子字符串只有2个字符长,因此当您尝试从不存在的索引3开始时,第二个子字符串将返回超出范围。
您的代码几乎评估为:
"ABXCD ,".substring(0,2) = "AB"
"AB".substring(3,5) = Out of bounds substring retrieval!
您需要执行类似
的操作myList.get(i).substring(0, 2) + myList.get(i).substring(3, 5)
或找到另一种做你想做的事情的方法。
答案 1 :(得分:0)
检查其是否包含X
后再使用
string = string.replaceAll("X","");
然后将其添加到列表
答案 2 :(得分:0)
abc1List.get(i).substring(0, 2).substring(3, 5)
似乎错了。
你不打算采用子串的子串?
你想要这样的东西:
myList.add(i+1,abc1List.get(i).substring(0, 2));
myList.add(i+2,abc1List.get(i).substring(3, 5));
答案 3 :(得分:0)