java - 如何从列表 <String> 中删除换行符

标签 java regex xml data-structures stax

我有一个从 XML 文件返回 Map 的方法。我已将该映射转换为单独的键和值到列表中。

但是我注意到值列表中有换行符。我怎样才能去掉换行符并用空格替换它们或将它们留空。

代码:

@Test
public void testGetXMLModelData() throws Exception {
    File f = new File("xmlDir/example.xml");
    Model m = getXMLModelData(f);

    logger.debug("Models Keys: "+m.getInputs());
    logger.debug("Models Values: "+m.getValues());
}

public Model getXMLModelData(File f) throws Exception { 

    Model model = new Model();

    Map<String,String> map = p(f);
    List<String> listKeys = new ArrayList<String>(map.keySet());
    List<String> listValues = new ArrayList<String>(map.values());

    model.setInputs(listKeys);
    model.setValues(listValues); 

    return model;
}


public Map<String, String> p(File file) throws Exception {

    Map<String, String> map = new HashMap<String,String>();
    XMLStreamReader xr = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream(file));

    while(xr.hasNext()) {

        int e = xr.next();
        if (e == XMLStreamReader.START_ELEMENT) {
            String name = xr.getLocalName();
            xr.next();
            String value = null;
            try {
                value = xr.getText();
            } catch (IllegalStateException exep) {
                exep.printStackTrace();
            }
            map.put(name, value);
        } 
    }
    return map;
}

输出:

2015-08-19 20:13:52,327 : Models Keys: [IRS1095A, MonthlyPlanPremiumAmtPP, WagesSalariesAndTipsAmt, MonthlyAdvancedPTCAmtPP, MonthCdPP, ReturnData, IndividualReturnFilingStatusCd, PrimaryResidentStatesInfoGrpPP, MonthlyPTCInformationGrpPP, IRS1040, ResidentStateInfoPP, SelfSelectPINGrp, MonthlyPremiumSLCSPAmtPP, Filer, ResidentStateAbbreviationCdPP, PrimaryBirthDt, Return, ReturnHeader, TotalExemptionsCnt, AdjustedGrossIncomeAmt, PrimarySSN]
2015-08-19 20:13:52,328 : Models Values: [
      , 136, 22000, 125, SEPTEMBER, 
    , 1, 
        , 
        , 
      , 
          , 
      , 250, 
      , CA, 1970-01-01, 
  , 
    , 1, 22000, 555-11-2222]

任何帮助或协助将不胜感激。提前致谢

编辑:

XML 文件

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

最佳答案

设置value = xr.getText().trim()。这将从值的开头和结尾删除无关的字符。

要防止添加该值,请使用 if (value != null && !value.isEmpty()) 包装 map.put(name, value)

关于java - 如何从列表 <String> 中删除换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32109007/

相关文章:

c# - 标准 xml 解析器在 Golang 中的性能非常低

java - 如何组合 int 和 string 数组?

java - 如何将 View 放置在屏幕上的任意位置?

ruby - 如何从 Ruby 中的 URL 中删除多个尾部斜杠

python - 在 python 中使用 re 匹配直到一个模式

java - 为什么要编译 XPath 表达式?

python - 使用 Python 和 ElementTree 在 XML 中搜索变量属性

java - java中根据特殊字符和括号分割段落

java - 文件编写器和空格?

php - 使用正则表达式提取 PHP 代码