Unterschiedliche reguläre Ausdrücke führen zu Java SE und zur Android-Plattform

Ich habe folgendesJava SE Code, der auf dem PC läuft

public static void main(String[] args) {
    // stringCommaPattern will change
    // ","abc,def","
    // to
    // ","abcdef","        
    Pattern stringCommaPattern = Pattern.compile("(\",\")|,(?=[^\"[,]]*\",\")");
    String data = "\"SAN\",\"Banco Santander, \",\"NYSE\"";
    System.out.println(data);
    final String result = stringCommaPattern.matcher(data).replaceAll("$1");
    System.out.println(result);
}

Ich bekomme erwartetes Ergebnis

"SAN","Banco Santander, ","NYSE"
"SAN","Banco Santander ","NYSE"

Doch wann kommt zuAndroid.

Pattern stringCommaPattern = Pattern.compile("(\",\")|,(?=[^\"[,]]*\",\")");
String data = "\"SAN\",\"Banco Santander, \",\"NYSE\"";
Log.i("CHEOK", data);
final String result = stringCommaPattern.matcher(data).replaceAll("$1");
Log.i("CHEOK", result);

Ich erhalte

"SAN","Banco Santander, ","NYSE"
"SAN","Banco Santandernull ","NYSE"

Irgendwelche Vorschläge und Problemumgehungen, wie ich diesen Code so machen kann, wie er sich bei Java SE verhält?

Zusätzliche Anmerkung :

Andere Muster liefern ebenfalls das gleiche Ergebnis. Es scheint, dass,Android verwendet eine leere Zeichenfolge für eine nicht zugeordnete Gruppe, und Java SE verwendet eine leere Zeichenfolge für eine nicht zugeordnete Gruppe.

Nimm den folgenden Code.

public static void main(String[] args) {
    // Used to remove the comma within an integer digit. The digit must be located
    // in between two string. Replaced with $1.
    //
    // digitPattern will change
    // ",100,000,"
    // to
    // ",100000,"        
    final Pattern digitPattern = Pattern.compile("(\",)|,(?=[\\d,]+,\")");
    String data = "\",100,000,000,\"";
    System.out.println(data);
    final String result = digitPattern.matcher(data).replaceAll("$1");
    System.out.println(result);
}
Java SE
",100,000,000,"
",100000000,"
Android
",100,000,000,"
",100null000null000,"

Antworten auf die Frage(1)

Ihre Antwort auf die Frage