Java 如何从列表中删除换行符<;字符串>;
我有一个方法,它从XML文件返回一个映射。我已将该映射转换为将键和值分隔到列表中 但是我注意到在值列表中有换行符。我怎样才能去掉换行符并用空格替换它们,或者让它们保持空白 代码: 任何帮助都将不胜感激。提前谢谢 编辑: XML文件Java 如何从列表中删除换行符<;字符串>;,java,regex,xml,data-structures,stax,Java,Regex,Xml,Data Structures,Stax,我有一个方法,它从XML文件返回一个映射。我已将该映射转换为将键和值分隔到列表中 但是我注意到在值列表中有换行符。我怎样才能去掉换行符并用空格替换它们,或者让它们保持空白 代码: 任何帮助都将不胜感激。提前谢谢 编辑: XML文件 <Return xmlns="http://www.irs.gov/efile"> <ReturnData> <IRS1095A uuid="a77f40a2-af31-4404-a27d-4c1eaad730c2">
<Return xmlns="http://www.irs.gov/efile">
<ReturnData>
<IRS1095A uuid="a77f40a2-af31-4404-a27d-4c1eaad730c2">
<MonthlyPTCInformationGrpPP uuid="69dc9dd5-5415-4ee4-a199-19b2dbb701be">
<MonthlyPlanPremiumAmtPP>136</MonthlyPlanPremiumAmtPP>
<MonthlyAdvancedPTCAmtPP>125</MonthlyAdvancedPTCAmtPP>
<MonthCdPP>SEPTEMBER</MonthCdPP>
<MonthlyPremiumSLCSPAmtPP>250</MonthlyPremiumSLCSPAmtPP>
</MonthlyPTCInformationGrpPP>
</IRS1095A>
<IRS1040>
<IndividualReturnFilingStatusCd>1</IndividualReturnFilingStatusCd>
<WagesSalariesAndTipsAmt>22000</WagesSalariesAndTipsAmt>
<TotalExemptionsCnt>1</TotalExemptionsCnt>
<AdjustedGrossIncomeAmt>22000</AdjustedGrossIncomeAmt>
</IRS1040>
</ReturnData>
<ReturnHeader>
<SelfSelectPINGrp>
<PrimaryBirthDt>1970-01-01</PrimaryBirthDt>
</SelfSelectPINGrp>
<Filer>
<PrimarySSN>555-11-2222</PrimarySSN>
<PrimaryResidentStatesInfoGrpPP>
<ResidentStateInfoPP uuid="a77f40a2-af31-4404-a27d-4c1eaad730c2">
<ResidentStateAbbreviationCdPP>CA</ResidentStateAbbreviationCdPP>
</ResidentStateInfoPP>
</PrimaryResidentStatesInfoGrpPP>
</Filer>
</ReturnHeader>
</Return>
136
125
九月
250
1.
22000
1.
22000
1970-01-01
555-11-2222
加利福尼亚州
设置value=xr.getText().trim()
。这将从值的开头和结尾修剪无关字符
为了防止添加值,请使用if(value!=null&&!value.isEmpty())将
map.put(name,value)
包装成if(value!=null&&!value.isEmpty())
设置value=xr.getText().trim()
。这将从值的开头和结尾修剪无关字符
为了防止添加值,请使用if(value!=null&&!value.isEmpty())将
map.put(name,value)
包装成if(value!=null&&!value.isEmpty())
设置value=xr.getText().trim()
。这将从值的开头和结尾修剪无关字符
为了防止添加值,请使用if(value!=null&&!value.isEmpty())将
map.put(name,value)
包装成if(value!=null&&!value.isEmpty())
设置value=xr.getText().trim()
。这将从值的开头和结尾修剪无关字符
为了防止添加值,请使用
if(value!=null&&!value.isEmpty())将map.put(name,value)
包装起来。
您的代码正在提取元素名和紧跟在开始元素之后的文本,忽略结束元素之后的任何文本
因此,它收集:
Return = <newline><space><space>
ReturnData = <newline><space><space><space><space>
IRS1095A = <newline><space><space><space><space><space><space>
MonthlyPTCInformationGrpPP = <newline><space><space><space><space><space><space><space><space>
MonthlyPlanPremiumAmtPP = 136
...
返回=
返回数据=
IRS1095A=
月加密信息GRPPP=
月计划费用IUMAMTPP=136
...
然后将它们添加到HashMap中,该HashMap以随机顺序洗牌键/值对,从而很难看到发生了什么
已更新
我不会为您编写代码,但如果您想要“值元素”,则需要:
Map<String, String> map = new HashMap<>();
try (FileInputStream in = new FileInputStream(file)) {
XMLStreamReader xr = XMLInputFactory.newInstance().createXMLStreamReader(in);
try (
String elementName = null;
StringBuilder textBuf = new StringBuilder();
while (xr.hasNext()) {
switch (xr.next()) {
case XMLStreamConstants.START_ELEMENT:
// 3. When seeing a start element and a start element is remembered
if (elementName != null) {
// verify text is empty or all whitespace
if (! textBuf.toString().trim().isEmpty())
throw new IllegalArgumentException("Found text mixed with elements");
// then discard text
textBuf.setLength(0);
}
// 1. Remember start element when seen
elementName = xr.getLocalName();
break;
case XMLStreamConstants.CHARACTERS:
case XMLStreamConstants.CDATA:
case XMLStreamConstants.SPACE:
// 2. Collect any text
textBuf.append(xr.getText());
break;
case XMLStreamConstants.END_ELEMENT: // 4. When seeing an end element
if (elementName != null) { // 1. if start element is remembered
// add elementName/text to result
map.put(elementName, textBuf.toString());
// then forget start element
elementName = null;
// and discard text
textBuf.setLength(0);
} else { // 2. if start element is not remembered (was forgotton)
// verify text is empty or all whitespace
if (! textBuf.toString().trim().isEmpty())
throw new IllegalArgumentException("Found text mixed with elements");
// then discard text
textBuf.setLength(0);
}
break;
default:
// ignore
}
}
} finally {
xr.close();
}
}
return map;
Map Map=newhashmap();
try(FileInputStream in=newfileinputstream(文件)){
XMLStreamReader xr=XMLInputFactory.newInstance().createXMLStreamReader(in);
试一试(
字符串elementName=null;
StringBuilder textBuf=新的StringBuilder();
而(xr.hasNext()){
开关(xr.next()){
案例XMLStreamConstants.START_元素:
//3.当看到起始元素时,会记住起始元素
if(elementName!=null){
//验证文本是否为空或全部为空白
如果(!textBuf.toString().trim().isEmpty())
抛出新的IllegalArgumentException(“找到了与元素混合的文本”);
//然后丢弃文本
textBuf.setLength(0);
}
//1.看到时记住开始元素
elementName=xr.getLocalName();
打破
大小写XMLStreamConstants.CHARACTERS:
案例XMLStreamConstants.CDATA:
案例XMLStreamConstants.SPACE:
//2.收集任何文本
textBuf.append(xr.getText());
打破
案例XMLStreamConstants.END_ELEMENT://4。当看到一个END元素时
if(elementName!=null){//1.如果开始元素被记住
//向结果中添加元素名称/文本
put(elementName,textBuf.toString());
//然后忘记开始元素
elementName=null;
//并丢弃文本
textBuf.setLength(0);
}else{//2.如果未记住起始元素(已被忽略)
//验证文本是否为空或全部为空白
如果(!textBuf.toString().trim().isEmpty())
抛出新的IllegalArgumentException(“找到了与元素混合的文本”);
//然后丢弃文本
textBuf.setLength(0);
}
打破
违约:
//忽略
}
}
}最后{
xr.close();
}
}
返回图;
您的代码正在提取元素名称和紧跟在开始元素之后的文本,而忽略结束元素之后的任何文本
因此,它收集:
Return = <newline><space><space>
ReturnData = <newline><space><space><space><space>
IRS1095A = <newline><space><space><space><space><space><space>
MonthlyPTCInformationGrpPP = <newline><space><space><space><space><space><space><space><space>
MonthlyPlanPremiumAmtPP = 136
...
返回=
返回数据=
IRS1095A=
月加密信息GRPPP=
月计划费用IUMAMTPP=136
...
然后将它们添加到HashMap中,该HashMap以随机顺序洗牌键/值对,从而很难看到发生了什么
已更新
我不打算为你写代码
Map<String, String> map = new HashMap<>();
try (FileInputStream in = new FileInputStream(file)) {
XMLStreamReader xr = XMLInputFactory.newInstance().createXMLStreamReader(in);
try (
String elementName = null;
StringBuilder textBuf = new StringBuilder();
while (xr.hasNext()) {
switch (xr.next()) {
case XMLStreamConstants.START_ELEMENT:
// 3. When seeing a start element and a start element is remembered
if (elementName != null) {
// verify text is empty or all whitespace
if (! textBuf.toString().trim().isEmpty())
throw new IllegalArgumentException("Found text mixed with elements");
// then discard text
textBuf.setLength(0);
}
// 1. Remember start element when seen
elementName = xr.getLocalName();
break;
case XMLStreamConstants.CHARACTERS:
case XMLStreamConstants.CDATA:
case XMLStreamConstants.SPACE:
// 2. Collect any text
textBuf.append(xr.getText());
break;
case XMLStreamConstants.END_ELEMENT: // 4. When seeing an end element
if (elementName != null) { // 1. if start element is remembered
// add elementName/text to result
map.put(elementName, textBuf.toString());
// then forget start element
elementName = null;
// and discard text
textBuf.setLength(0);
} else { // 2. if start element is not remembered (was forgotton)
// verify text is empty or all whitespace
if (! textBuf.toString().trim().isEmpty())
throw new IllegalArgumentException("Found text mixed with elements");
// then discard text
textBuf.setLength(0);
}
break;
default:
// ignore
}
}
} finally {
xr.close();
}
}
return map;