【问题标题】:Returning two substrings from a string从一个字符串中返回两个子字符串
【发布时间】:2012-10-15 10:49:53
【问题描述】:

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

我得到一个字符串索引越界异常。如何纠正?

【问题讨论】:

    标签: java regex string arraylist substring


    【解决方案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
    【解决方案2】:

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

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

    然后将其添加到列表中

    【讨论】:

    • @MaVRoSCy 在更具体的术语中,我更感兴趣的是.substring(int beginIndex, int endIndex).substring(int beginIndex, int endIndex) 在 Java String 类中是否合法:/ Eclipse 没有显示任何错误,我不能'在以前发布的问题中找不到任何答案。
    【解决方案3】:

    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));
    

    【讨论】:

    • @Sameer Right 但问题是我需要它驻留在同一个索引/元素中
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2012-11-05
      • 2013-04-18
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      相关资源
      最近更新 更多