2016-12-13 74 views
0

我需要幫助下面的問題。按代碼即時得到下面的輸出:如何使用java過濾字符串/數組

parameter_Name: Raghu 
parameter_Name: Kartik 
parameter_Name: sundar 

但在內容,如果我有下面的格式,

content = "Hi {{Raghu}}, this is your {{kartik}} last 4 {{sundar}}. {{each numberdetail}} {{loop_var. ABC}} {{loop_var. DEF}} {{loop_var. GHI}}{{end}}"; 

所以在上面的字符串,如果{{每個到來時,將過濾「{{each」,並將採用「numberdetail」作爲單獨的數組。如果{{loop_var出現,請刪除loop_var並在numbderdetail錯誤中添加ABC。如果我們發現{{end}},那麼我們將終止該數組。

任何想法請。

預期輸出:

"Parameter_name": "Raghu", 
    "Salary": "32.17", 
    "LineDetail": [{ 
     "ABC": "0", 
     "DEF": "Device", 
     "GHI": "792.00" 
    }] 

代碼:

public class JavaTest { 

    public static void main(String[] args) { 

     String content = "Hi {{Raghu}}, this is your {{kartik}} last 4 {{sundar}}."; 

     String[] contentArray; 
     List contentArrayList = new ArrayList(); 

     if (content != null && content.trim() != "" && !content.equals("")) { 
      contentArray = content.split(" "); 
      for (String out : contentArray) { 
       if (!"".equals(out) && out.contains("{{")) { 
        String parameter_Name = out.substring(out.indexOf("{{") + 2, out.indexOf("}}")); 
        System.out.println("parameter_Name::" + parameter_Name); 
       } 
      } 
     } 
    } 
} 
+0

你說'content'是一方面在第一,但在你的代碼,'content'不匹配,你說,這是說明。 –

+0

歡迎來到堆棧溢出!它看起來像你需要學習使用調試器。請幫助一些[互補調試技術](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。如果您之後仍然有問題,請隨時返回更多詳情。 –

+0

根據您描述的規則,我甚至沒有看到您嘗試處理「{{each ...」或「{{loop_var ...」或「{{end}}」。你有什麼*嘗試*? – dcsohl

回答

0

嗯,我想這是你所需要的。

public class JavaTest { 

public static void main(String[] args) { 

    String content = "Hi {{Raghu}}, this is your {{kartik}} last 4 {{sundar}}. {{each numberdetail}} {{loop_var. ABC}} {{loop_var. DEF}} {{loop_var. GHI}}{{end}}"; 
    Pattern pattern = Pattern.compile("\\{\\{\\w+\\.* *\\w*\\}\\}"); 
    Matcher m = pattern.matcher(content); 
    List<String> list = new ArrayList<String>(); 

    while (m.find()) { 

     list.add(m.group().replaceAll("\\{", "").replaceAll("\\}", "")); 
    } 

    boolean insideLoop= false; 

    for (String current: list){ 

     if (current.startsWith("each")){ 
      insideLoop = true; 
      System.out.println("Parameter_Name: " + current.split(" ")[1] + ": [{"); 

     } else if (insideLoop){ 
      if (current.startsWith("loop_var.")){ 
       String value = current.split(" ")[1]; 
       System.out.println("\"" + value + "\""); 

      }else { 
       if (current.startsWith("end")){ 
        insideLoop = false; 
        System.out.println("}]"); 
       } 
      } 
     }else { 
      System.out.println("Parameter_Name: " + current); 
     } 
    } 

} 

}

輸出是:

Parameter_Name: Raghu 
Parameter_Name: kartik 
Parameter_Name: sundar 
Parameter_Name: numberdetail: [{ 
"ABC" 
"DEF" 
"GHI" 
}] 
+0

嗨實際上我正在尋找下面的輸出代碼:「Parameter_name」:「2-3」, 「薪水」:「32。17" , 「LineDetail」:[{ 「ABC」: 「0」, 「DEF」: 「設備」, 「GHI」: 「792.00」 }] – Nancy

+0

嗨南希 你已經修改了你的問題當我發佈我的答案後,我仍然認爲我的答案可以給你一個幾乎完整的線索開始 – SCouto

+0

@ scouto-實際上我給出了內容字符串的示例輸出,但請記住,從字符串內容中,行數但是所有這些值都是使用Syste,.out.prntln來打印的,我希望所有這些值都在JSON對象中,請給我一個解決方案,請幫助我解決這個問題。 – Nancy