2013-03-27 35 views
0

需要建議以更好的方式處理這個問題?JAVA:在管道上分割並將值附加到字符串

我的數據存儲爲TAX | CHURCH,Texas,San Antonia,250.00 |學校,內華達州,公園學校,122.1稅務,教會,學校是代碼,我不感興趣,但他們的價值。

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 | SCHOOL,內華達州,公園,學校,122.1」
「教堂,得克薩斯州,聖安東尼,250.00 | SCHOOL,內華達州,公園,學校,122.1」
「TAX |教堂,得克薩斯州,聖安東尼,250.00」
or「我們得到的最終輸入是」,Texas,San Antonia,250.00 | ,內華達州,公園 - ,122.1「但我希望我的最後一個字符串是

輸入=」 得克薩斯州,聖安東尼,250.00,內華達州,公園,學校,122.1

+0

這些規範是真的含糊。你希望擺脫的「CHURCH」和「SCHOOL」值是否總是跟着逗號? 「TAX」在哪裏? – Keppil 2013-03-27 21:15:05

+0

刪除所有'(SCHOOL | CHURCH | TAX),'並替換'| '通過','? – 2013-03-27 21:15:10

回答

3

如果輸入格式是保證是你提到的格式之一,下面的代碼將工作:

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,

開頭,所以我建議閱讀正則表達式,這在這種情況下可能非常有用。

1

我只是添加空間就像這樣:

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 */ 
+0

這不能解決Park-問題。它刪除字符串中的每個SCHOOL字,我只想刪除pipe(|)後面的第一個單詞,我應該只是「SCHOOL」 – 2013-03-28 14:23:10

+0

不,它不是,輸出是「輸入:Texas,San Antonia, 250.00 NEVADA,公園學校,122.1「',它將刪除'後面有空格的學校',任何方式http://stackoverflow.com/a/15670100/1743852試試這個答案我認爲這是你想要的 – 2013-03-28 14:28:30

1

試試這個

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