我在解析时面临一个问题,
我有一个字符串: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
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
我觉得你正在接近这个问题,你想要一个由| ^分隔的字符串的ArrayList。我会这样做:
ArrayList<String> params = new ArrayList<String>(Arrays.asList(str.split("\\|\\^")));
答案 1 :(得分: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]
;
答案 2 :(得分: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;
}
但最好的方法是使用String split方法。
例如:
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);
}
看起来更干净。
答案 3 :(得分:0)
问题可能就在这里;
input = input.substring(i + delimeter.length(), input.length());
public String substring(int beginIndex, int endIndex)
返回一个新字符串,该字符串是此字符串的子字符串。子串 从指定的 beginIndex 开始,并延伸到at处的字符 index endIndex - 1 。因此子串的长度是 endIndex的-的beginIndex。
答案 4 :(得分:0)
我运行了你的代码而没有获得IndexOutOfBoundsException
。相反,该方法返回数组[“20”,“64”,“新收入 - 增长”,“10.0”]。
要修复代码以包含最后一个元素,请更改此代码段:
if (parsed_strings.size() < 1) {
parsed_strings.add(input);
}
到这个新片段:
parsed_strings.add(input);
答案 5 :(得分:0)
这是因为你停在2011年12月27日之前的最后一个索引。^ 您应该更改算法或在字符串
结尾处使用| ^