从字符串返回两个子字符串

时间:2012-10-25 09:23:10

标签: java regex string arraylist substring

在搜索预先填充的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));
   }

我得到一个超出界限的字符串索引。怎么能纠正这个?

4 个答案:

答案 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)

确实,问题在于形成另一个子串的子串。 由于子字符串(0,2)只包含3个字符,形成另一个具有greter长度的子字符串将产生错误。 您可以使用+运算符来连接2个子字符串