2017-11-08 1 views
0

Ich muss nur jede andere Zahl in einer Folge von Zahlen verwenden. So kommt der Inhalt der XML-Datei zu uns, aber ich möchte nur die erste Gruppe und dann jede andere Gruppe verwenden. Die zweite Nummer in jeder Gruppe kann ignoriert werden. Die wichtigste Nummer sind die ersten wie 1,3,5 und 29 Können Sie helfen? Jede Gruppe entspricht „x“:“x“,Wie überspringe ich einen Teil einer Zeile in Java- Ich weiß nicht, was ich mache

<CatcList>{“1":"15","2":"15","3":"25","4":"25","5":"35","6":"35","29":"10","30":"10"}</CatcList> 

Gerade jetzt mein Skript wie folgt aussieht, aber ich bin nicht derjenige, der es geschrieben hat.

Ich habe nur den Teil enthalten, der benötigt würde. Die StartPage wäre die verwendete Variable. Wenn Sie wissen, wie 1 zur EndPage Integer hinzugefügt wird, wäre das auch sehr hilfreich. Vielen Dank!

Util.StringList xs; 
line.parseLine(",", "", xs); 
for (Int i=0; i<xs.Size; i++) { 
    Int qty = xs[i].right(xs[i].Length - xs[i].find(":")-1).toInt()-1; 
    for (Int j=0; j<qty; j++) { 
     Output_0.File.DocId = product; 
     Output_0.File.ImagePath = Image; 
     Output_0.File.ImagePath1 = Image; 
    Output_0.File.StartPage = xs[i].left(xs[i].find(("-"))).toInt()-1; 
    Output_0.File.EndPage = xs[i].mid(xs[i].find("-")+1, (xs[i].find(":") - xs[i].find("-")-1)).toInt()-0; 
     Output_0.File.Quantity = qty.toString(); 
     Output_0.File.commit(); 
+0

Ich sollte klarstellen, es ist nicht das CATCList-Feld, das ich brauchte, zeigt nur, für welche Inhalte in der XML kommt. Ich muss Output_0.File.StartPage Code geändert, um zu tun, was ich im ersten Absatz gesagt habe. Zum Beispiel möchte ich nur die 1 in der ersten Gruppe "1": "15" und die 3 in der nächsten Gruppe von "3": "25" –

Antwort

0

Try this:

,?("(?<num>\d+)":"\d+"),?("\d+":"\d+")? 

Die Gruppe mit dem Namen num wird jedes zweite Auftreten des ersten Teils von "x" enthalten: "x"

so für die Werte:

"1":"14","2":"14","3":"14","4":"24","5":"33","6":"44","7":"55" 

Die Gruppe 'num' enthält 1 3 5 und 7.

see example here

Edit: Wenn Sie die Zahlen extrahiert haben, können Sie damit machen, was Sie brauchen:

Pattern datePatt = Pattern.compile(",?(\"(?<num>\\d+)\":\"\\d+\"),?(\"\\d+\":\"\\d+\")?"); 
String dateStr = "\"1\":\"14\",\"2\":\"14\",\"3\":\"14\",\"4\":\"24\",\"5\":\"33\",\"6\":\"44\",\"7\":\"55\""; 
Matcher m = datePatt.matcher(dateStr); 

while (m.find()) {   
    System.out.printf("%s%n", m.group("num"));   
} 
+0

Das scheint wie, was ich brauche, aber wo soll ich das setzen in Bezug auf den obigen Code? Bear mit mir, ich weiß nichts. –

0

Sie Muster mit einer Schleife verwenden können, und eine Bedingung, diese Informationen zu extrahieren:

String string = "<CatcList>{\"1\":\"15\",\"2\":\"15\",\"3\":\"25\",\"4\":\"25\"," 
     + "\"5\":\"35\",\"6\":\"35\",\"29\":\"10\",\"30\":\"10\"}</CatcList> "; 
String regex = "\"(\\d+)\":\"\\d+\""; 

Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(string); 
int index = 0; 
while (matcher.find()) { 
    if (index % 2 == 0) {//From your question you have to get alternative results 1 3 5 ... 
     System.out.println(matcher.group(1) + " ---> " + matcher.group()); 
    } 
    index++; 
} 

Ausgänge

1 ---> "1":"15" 
3 ---> "3":"25" 
5 ---> "5":"35" 
29 ---> "29":"10" 

Die Regex "(\d+)":"\d+" sollte beliebige Kombination aus einer "number":"number" passen i verwendet (\d+) so kann ich nur die Informationen dieser Gruppe erhalten.

0

Dieser XML-Wert sieht wie eine JSON-Map aus. All das .right, .mid und .left-Code sieht für mich ziemlich verwirrend aus, ohne Einzelheiten darüber zu kennen, wie diese Methoden funktionieren. Ist so etwas wie dies scheint klar:

// leaving out all the backslash escapes of the embedded quotes 
String xmlElement = "{"1":"15","2":"15","3":"25","4":"25","5":"35","6":"35","29":"10","30":"10"}"; 
xmlElement = xmlElement.replaceAll("[}{]", ""); 
String[] mapEntryStrings = xmlElement.split(","); 
Map<Integer, String> oddStartPages = new HashMap<Integer, String>(); 
for (String entry : mapEntryStrings) { 
    String[] keyAndValue = entry.split(":"); 
    int key = Integer.parseInt(keyAndValue[0]); 
    if (key % 2 == 1) {// if odd 
     oddStartPages.put(key, keyAndValue[1]); 
    } 
} 

Dann wird der Satz von Schlüsseln in der oddStartPages Karte ist genau die Menge von ersten Zahlen in Ihrer „ersten und jeder anderen Gruppe“ Anforderung.

Verwandte Themen