0

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

4 回答 4

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)

或找到另一种方法来做你想做的事。

于 2012-10-25T09:25:15.487 回答
0

检查它是否包含X然后使用

string = string.replaceAll("X","");

然后将其添加到列表中

于 2012-10-25T09:26:12.610 回答
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));
于 2012-10-25T09:31:55.733 回答
0

是的,确实问题在于形成另一个子串的子串。由于 substring(0, 2) 仅包含 3 个字符,形成另一个长度更大的子字符串会给出错误。您可以使用 + 运算符连接 2 个子字符串

于 2012-10-25T09:49:52.317 回答