[英]Java String split by whitespace not working
我正在尝试将输入字符串传递到HashMap的ArrayList中,并为此编写了一个方法。
public static ArrayList<HashMap<String, String>> tagSeparator (String input) {
ArrayList<HashMap<String, String>> listOfTags = new ArrayList<HashMap<String, String>>();
HashMap<String, String> newTags = new HashMap<String, String>();
for (String eachLine: input.split("/>")) {
eachLine = (eachLine.trim()).substring(eachLine.indexOf("<")+1);
newTags.put("TagName", eachLine.substring(0, eachLine.indexOf(" ")));
eachLine = eachLine.substring(eachLine.indexOf(" "));
for (String AttrVal: eachLine.split(CharMatcher.WHITESPACE.toString())) {
System.out.println("AttrVal: " + AttrVal);
String Attr = AttrVal.substring(0, AttrVal.indexOf("="));
String Val = CharMatcher.is('"').trimFrom(AttrVal.substring(AttrVal.indexOf("=")));
newTags.put(Attr, Val);
}
listOfTags.add(newTags);
newTags.clear();
}
return listOfTags;
}
我在下面给出输入-
<AssinaturaTax12110000 Tag="12110000" TaxName="ICMS" TaxRate="25.00" TaxAmount="24.75"/> <AssinaturaTax12110000 Tag="12110000" TaxName="PIS" TaxRate="0.65" TaxAmount="0.64"/> <AssinaturaTax12110000 Tag="12110000" TaxName="COFINS" TaxRate="3.00" TaxAmount="2.97"/>
假定第一个for-each循环将各行分开,而第二个for-each循环则将每行中的AVP分开。 我已经使用番石榴在第二个for-each循环中标识空白。 尽管第一个for-each循环按预期工作,但在第二个循环中,String拆分不起作用。 我尝试使用正则表达式“”,“ \\\\ s +”和“ \\\\ s”,以及Apache Commons StringUtils拆分方法,但未能产生所需的输出。
有一个StringIndexOutOfBounds异常,控制台输出如下所示-
AttrVal: Tag="12110000" TaxName="ICMS" TaxRate="25.00" TaxAmount="24.75"
我要去哪里错了?
我发现您的代码存在一些问题:
for (String AttrVal: eachLine.trim().split("[\\\\s]+"))
而不是for (String AttrVal: eachLine.split("[\\\\s]+"))
。 trim()函数自动删除字符串开头和结尾的空格字符。 HashMap<String,String> copy = new HashMap(newTags);
。 然后将副本添加到ArrayList。 通过使用该构造函数,将复制newTags中的所有值,并且不保留对newTags的引用,因此您可以使用newTags进行所需的任何操作,例如清除它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.