0

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

我想用分隔符“|^”来解析它。

我试过这样:

ArrayList<String> stocklist = IOUtil.parseResponse(str, "|^");

这是 parseResponse() 方法:

public static ArrayList<String> parseResponse(String input, String delimeter) {
    ArrayList<String> parsed_strings = new ArrayList<String>();
    while (true) {
        int i = input.indexOf(delimeter);
        if (i >= 0) {
            String s = input.substring(0, i);
            parsed_strings.add(s.trim());
            input = input.substring(i + delimeter.length(), input.length());
        } else {
            break;
        }
    }
    if (parsed_strings.size() < 1) {
        parsed_strings.add(input);
    }
    return parsed_strings;
}

但我没有得到最后一个元素27-Dec-2011。我得到 outOfBoundException 为:java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4 任何帮助将不胜感激。提前致谢。

4

6 回答 6

1

我觉得你处理这个问题是错误的,你想要一个由 |^ 分隔的字符串的 ArrayList。我会这样做:

ArrayList<String> params = new ArrayList<String>(Arrays.asList(str.split("\\|\\^")));
于 2013-10-10T13:23:38.057 回答
1
String []b = "20|^64|^New Income - GROWTH|^10.0|^27-Dec-2011".split("\\|\\^");
for (String a: b) {
   System.out.println(a);
}

印刷:

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

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

于 2013-10-10T13:24:52.363 回答
1

您只是将子字符串添加到以 . 结尾的数组中|^。如果你在字符串的末尾加上一个额外|^的东西,一切都会好起来的。或者更改代码,使其始终添加字符串的剩余部分(在最后一个分隔符之后)。像这样:

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

但最好的办法是使用字符串拆分方法。

例如像这样:

public static ArrayList<String> parseResponse(String input, String delimeter) {
    String quotedDelimiter = Pattern.quote(delimeter);
    String[] outputArray = input.split(quotedDelimiter);
    List<String> outputList = Arrays.asList(outputArray);
    return new ArrayList<String>(outputList);
}

看起来干净多了。

于 2013-10-10T13:25:57.903 回答
0

问题可能就在这里;

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

子串()

公共字符串子字符串(int beginIndex,int endIndex)

返回一个新字符串,它是该字符串的子字符串。子字符串从指定的beginIndex开始并延伸到索引endIndex - 1处的字符。因此子串的长度是 endIndex-beginIndex。

于 2013-10-10T13:20:07.827 回答
0

我运行了您的代码,但没有得到IndexOutOfBoundsException. 相反,该方法返回数组 ["20", "64", "New Income - GROWTH", "10.0"]。

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

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

到这个新片段:

parsed_strings.add(input);
于 2013-10-10T13:21:10.293 回答
0

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

于 2013-10-10T13:22:22.857 回答