【问题标题】:JAVA: split on pipe and append the values to stringJAVA:在管道上拆分并将值附加到字符串
【发布时间】:2013-03-27 21:09:35
【问题描述】:

需要建议以更好的方式处理这个问题吗?

我的数据存储为 TAX|CHURCH, Texas, San Antonia, 250.00 | SCHOOL, NEVADA, Park-SCHOOL, 122.1 其中 TAX、CHURCH、SCHOOL 是我不感兴趣但它们的价值的代码。

if (input != null && !"NOTFOUND".equalsIgnoreCase(input)) {
    String[] list_str = input.split("\\|");
    int list_length = list_str.length;
    int i;

    for (String asset : list_str) {
        System.out.println(" asset : " + asset);
        if (asset.contains("TAX")) {
            /* get values for "TAX" */
            /* replace "TAX" from values */
        }

        if (asset.contains("CHURCH")) {
            input = input.replaceFirst("CHURCH", "");
        }

        if (asset.contains("SCHOOL")) {
            input = input.replaceAll("SCHOOL", "");
        }
    }
}

System.out.println(" input : " + input); /* final input */

输入条件:

我的输入字符串可能看起来像 =
"TAX|得克萨斯州教堂,圣安东尼亚,250.00 | 内华达州学校,帕克学校,122.1"
"德克萨斯州教堂,圣安东尼尼亚,250.00 | 内华达州学校,帕克学校, 122.1"
"TAX|CHURCH, Texas, San Antonia, 250.00"
"CHURCH, Texas, San Antonia, 250.00"

我得到的最终输入是“,Texas, San Antonia, 250.00 | , NEVADA, Park-, 122.1”,但我希望我的最终字符串是

input = "德克萨斯州,圣安东尼娅,250.00,内华达州,Park-SCHOOL,122.1"

【问题讨论】:

  • 这些规范真的很模糊。您要删除的 CHURCHSCHOOL 值是否总是后跟逗号? TAX 在哪里?
  • 删除所有(SCHOOL|CHURCH|TAX), 并替换`| `, ?

标签: java string replace split


【解决方案1】:

如果输入格式保证是您提到的格式之一,则以下代码将起作用:

public class TestClass {

public static void main(String[] args) {
    String input = "TAX|CHURCH, Texas, San Antonia, 250.00 | SCHOOL, NEVADA, Park-SCHOOL, 122.1";
    String[] parts = input.split(" \\| ");
    String result = parts[0].split("CHURCH, ")[1];

    if (parts.length > 1) {
        result += ", " + parts[1].substring(8); 
    }

    System.out.println(result);
}

}

这会将整个表达式分成两部分,使用正则表达式检查字符串 |,使用单独的正则表达式获取第一部分中 CHURCH, 之外的所有内容,以及表达式的第二部分是否存在,它使用硬编码索引来获取您需要的子字符串,因为第二部分总是以 SCHOOL,

我建议阅读在这种情况下非常有用的正则表达式。

【讨论】:

    【解决方案2】:

    我只是像这样添加空格:

        String input = "CHURCH, Texas, San Antonia, 250.00 | SCHOOL, NEVADA, Park-SCHOOL, 122.1";
        String i = "";
        if (input != null && !"NOTFOUND".equalsIgnoreCase(input)) {
    
            String[] list_str = input.split(" \\| ");
    
            for (String asset : list_str) {
                System.out.println(asset);
                i = i + asset+" ";
                if (asset.contains("TAX")) {
                    /* get values for "TAX" */
                    /* replace "TAX" from values */
                }
    
                if (input.contains("CHURCH,")) {
                    i =  i.replaceFirst("CHURCH,", "");
                }
    
                if (input.contains(" SCHOOL,")) {
                    i =  i.replaceAll(" SCHOOL,", "");
                }
    
    
            }
    
        }
        System.out.println(" input : " + i); /* final input */
    

    【讨论】:

    • 这并不能解决公园问题。它从字符串中删除每个 SCHOOL 单词,我只想删除管道( | )之后的第一个单词,我应该只是“SCHOOL”
    • 不,不是,输出是"input : Texas, San Antonia, 250.00 NEVADA, Park-SCHOOL, 122.1",它将删除后面有空格的school,无论如何stackoverflow.com/a/15670100/1743852试试这个答案,我认为这是你想要的
    【解决方案3】:

    试试这个

    String input = "CHURCH, Texas, San Antonia, 250.00 | SCHOOL, NEVADA, Park-SCHOOL, 122.1";
    
    if (input != null && !"NOTFOUND".equalsIgnoreCase(input)) {
        String[] list_str = input.split("\\|");
    
        for (String asset : list_str) {
            System.out.println(" asset : " + asset);
            if (asset.contains("TAX")) {
                /* get values for "TAX" */
            /* replace "TAX" from values */
            }
    
            if (asset.contains("CHURCH")) {
                input = input.replaceFirst("CHURCH,", "");
            }
    
            if (asset.contains("SCHOOL")) {
                input = input.replaceFirst("SCHOOL", "");
            }
        }
        input = input.replaceAll(" \\| ", "");
    }
    
    System.out.println(" input : " + input); /* final input */
    

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 2019-06-19
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多