在java中解析字符串时发生outOfBoundException

在java中解析字符串时发生outOfBoundException,java,Java,我在解析中面临一个问题, 我有一个字符串:String str=“20 | ^64 | ^New Income-GROWTH | ^10.0 | ^27-Dec-2011” 我想用分隔符“| ^ 我试过这样做: ArrayList<String> stocklist = IOUtil.parseResponse(str, "|^"); ArrayList stocklist=IOUtil.parseResponse(str,“|^”); 下面是parseResponse()方法:

我在解析中面临一个问题, 我有一个字符串:
String str=“20 | ^64 | ^New Income-GROWTH | ^10.0 | ^27-Dec-2011”

我想用分隔符“| ^

我试过这样做:

ArrayList<String> stocklist = IOUtil.parseResponse(str, "|^");
ArrayList stocklist=IOUtil.parseResponse(str,“|^”);
下面是parseResponse()方法:

publicstaticarraylistparseresponse(字符串输入,字符串delimeter){
ArrayList解析的_字符串=新ArrayList();
while(true){
int i=输入指数(delimeter);
如果(i>=0){
字符串s=输入。子字符串(0,i);
解析的_字符串。添加(s.trim());
input=input.substring(i+delimeter.length(),input.length());
}否则{
打破
}
}
if(已解析的_strings.size()<1){
解析的_字符串。添加(输入);
}
返回解析的_字符串;
}
但我没有得到最后一个元素
2011年12月27日
。我得到的边界异常为:
java.lang.IndexOutofBoundException:索引4无效,大小为4

任何帮助都将不胜感激。提前感谢。

问题可能在这里

input = input.substring(i + delimeter.length(), input.length());

公共字符串子字符串(int beginIndex, 内部索引)

返回作为此字符串的子字符串的新字符串。子串 从指定的beginIndex开始,并延伸到 索引结束索引-1。因此,子字符串的长度是 endIndex beginIndex


问题可能就在这里

input = input.substring(i + delimeter.length(), input.length());

公共字符串子字符串(int beginIndex, 内部索引)

返回作为此字符串的子字符串的新字符串。子串 从指定的beginIndex开始,并延伸到 索引结束索引-1。因此,子字符串的长度是 endIndex beginIndex


问题可能就在这里

input = input.substring(i + delimeter.length(), input.length());

公共字符串子字符串(int beginIndex, 内部索引)

返回作为此字符串的子字符串的新字符串。子串 从指定的beginIndex开始,并延伸到 索引结束索引-1。因此,子字符串的长度是 endIndex beginIndex


问题可能就在这里

input = input.substring(i + delimeter.length(), input.length());

公共字符串子字符串(int beginIndex, 内部索引)

返回作为此字符串的子字符串的新字符串。子串 从指定的beginIndex开始,并延伸到 索引结束索引-1。因此,子字符串的长度是 endIndex beginIndex


我运行了您的代码,但未获得
索引AutofBoundsException
。相反,该方法返回数组[“20”、“64”、“新收入增长”、“10.0”]

要修复代码以包含最后一个元素,请更改此代码段:

if (parsed_strings.size() < 1) {
    parsed_strings.add(input);
}

我运行了您的代码,但未获得
索引AutofBoundsException
。相反,该方法返回数组[“20”、“64”、“新收入增长”、“10.0”]

要修复代码以包含最后一个元素,请更改此代码段:

if (parsed_strings.size() < 1) {
    parsed_strings.add(input);
}

我运行了您的代码,但未获得
索引AutofBoundsException
。相反,该方法返回数组[“20”、“64”、“新收入增长”、“10.0”]

要修复代码以包含最后一个元素,请更改此代码段:

if (parsed_strings.size() < 1) {
    parsed_strings.add(input);
}

我运行了您的代码,但未获得
索引AutofBoundsException
。相反,该方法返回数组[“20”、“64”、“新收入增长”、“10.0”]

要修复代码以包含最后一个元素,请更改此代码段:

if (parsed_strings.size() < 1) {
    parsed_strings.add(input);
}

这是因为您停留在2011年12月27日之前的最后一个索引^处
您应该更改算法或在字符串末尾添加^

这是因为您在2011年12月27日之前的^的最后一个索引处停止
您应该更改算法或在字符串末尾添加^

这是因为您在2011年12月27日之前的^的最后一个索引处停止
您应该更改算法或在字符串末尾添加^

这是因为您在2011年12月27日之前的^的最后一个索引处停止
你要么改变算法,要么在字符串末尾加上“^”

我觉得你处理这个问题的方法不对,你想要一个由“^”分隔的字符串数组列表。我会这样做:

ArrayList<String> params = new ArrayList<String>(Arrays.asList(str.split("\\|\\^")));
ArrayList params=新的ArrayList(Arrays.asList(str.split(\\\\\\\^));

我觉得您处理这个问题的方法不对,您需要一个由^分隔的字符串数组列表。我会这样做:

ArrayList<String> params = new ArrayList<String>(Arrays.asList(str.split("\\|\\^")));
ArrayList params=新的ArrayList(Arrays.asList(str.split(\\\\\\\^));

我觉得您处理这个问题的方法不对,您需要一个由^分隔的字符串数组列表。我会这样做:

ArrayList<String> params = new ArrayList<String>(Arrays.asList(str.split("\\|\\^")));
ArrayList params=新的ArrayList(Arrays.asList(str.split(\\\\\\\^));

我觉得您处理这个问题的方法不对,您需要一个由^分隔的字符串数组列表。我会这样做:

ArrayList<String> params = new ArrayList<String>(Arrays.asList(str.split("\\|\\^")));
ArrayList params=新的ArrayList(Arrays.asList(str.split(\\\\\\\^));
印刷品:

20
64 
New Income - GROWTH
10.0
27-Dec-2011
然后,日期字符串是
b[4]

印刷品:

20
64 
New Income - GROWTH
10.0
27-Dec-2011
然后,日期字符串是
b[4]

印刷品:

20
64 
New Income - GROWTH
10.0
27-Dec-2011
然后,日期字符串是
b[4]

印刷品:

20
64 
New Income - GROWTH
10.0
27-Dec-2011

然后,日期字符串是
b[4]

您只是将子字符串添加到以
|^
结尾的数组中。如果在字符串末尾添加一个
| ^
,一切都会正常。或者更改代码,使其始终添加字符串的剩余部分(位于最后一个分隔符后面)。像这样:

public static ArrayList<String> parseResponse(String input, String delimeter) {
    ArrayList<String> parsed_strings = new ArrayList<String>();
    int i = -1;
    while ((i = input.indexOf(delimeter)) >= 0) {
        String s = input.substring(0, i);
        parsed_strings.add(s.trim());
        input = input.substring(i + delimeter.length(), input.length());
    }
    parsed_strings.add(input);
    return parsed_strings;
}
publicstaticarraylistparseresponse(字符串输入,字符串delimeter){
ArrayList解析的_字符串=新ArrayList();
int i=-1;
而((i=input.indexOf(delimeter))>=0){
字符串s=输入。子字符串(0,i);
解析的_字符串。添加(s.trim());
input=input.substring(i+delimeter.length(),input.length