2016-12-13 13 views
0

以下の質問についてはヘルプが必要です。 {{それぞれが来る、フィルタリングされます場合、私は、上記の文字列にそう下記フォーマット、Javaを使用して文字列/配列をフィルタリングする方法

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

を持っている場合

parameter_Name: Raghu 
parameter_Name: Kartik 
parameter_Name: sundar 

しかし、コンテンツ内:以下の出力を得るコードイムあたりとして"{{each 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"、 "Salary": "32。17" 、 "LineDetail":[{ "ABC": "0"、 "DEF": "デバイス"、 "GHI": "792.00" }] – Nancy

+0

こんにちはナンシー あなたはあなたの質問を変更しました – SCouto

+0

@ scout-実際には、コンテンツの文字列でサンプル出力を行いましたが、文字列の内容から、行数しかし、これらすべての値は、Syste、.out.prntlnを使って印刷されています。私はJSONオブジェクトのこれらの値をすべて欲しがります。親切に私にこれを解決してください。 – Nancy

関連する問題