2016-04-24 5 views
1

Ich habe dieses seltsame Problem in Android Studio, in dem mein Programm die Zeichenfolge, die ich über Regex abgleiche, nicht analysieren kann.Meine Zeichenfolge stimmt nicht mit meiner Regex überein, obwohl sie auf regex101 korrekt ist

private Pattern myPattern = Pattern.compile("([Request ID:]+)(\\d+)([, BY:]+)(\\d+)([ ])([A-Z\\d ]+)([ ])([amount:]+)(\\d+(\\.\\d{1,2}))"); 

    msg = "Request ID:22, BY:123414045601 DEALER01 amount:100.00 | Request ID:41, BY:123414DEALER01 amount:100.00 | Request ID:2, BY:123414032110 DEALER MAKER5 amount:500.00"; 

    String[] items = msg.split("\\|"); 
    for(int i = 0; i <items.length; i++){ 

     Matcher match = pendingPattern.matcher(items[i]); 
     if (!match.matches()) { 

     } else { 

      list1.add(match.group(2)); 
      list2.add(match.group(4)); 
      list3.add(match.group(9)); 
     } 
    } 

Meine regex matches "ID anfordern: 2, BY: 123414032110 DEALER MAKER5 Menge: 500.00" aber tut die anderen Einträge anzeigen lassen. Ich habe dies bereits auf regex101.com überprüft und alle meine Einträge stimmen dort überein.

Ihre Einsicht wird sehr geschätzt.

Antwort

1

Es ist wegen Leerzeichen vor und nach | in Ihrer Eingabe.

können Sie String.trim() verwenden es los zu bekommen:

Matcher match = pendingPattern.matcher(items[i].trim()); 

Oder lassen Sie keine Leerzeichen in Split-Array angezeigt werden, indem diese regex in Split mit:

String[] items = msg.split("\\s*\\|\\s*"); 
+1

Vielen Dank ! Das hat mein Problem gelöst. Ich habe nicht gedacht, dass die weißen Räume eine solche Wirkung haben. – Strauss

Verwandte Themen