Różne wyrażenia regularne skutkują na platformie Java SE i Android

Mam następująceJava SE kod, który działa na PC

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);
}

Otrzymuję oczekiwany wynik

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

Jednak kiedy przychodziAndroid.

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);

Otrzymuję

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

Wszelkie sugestie i obejścia, jak mogę sprawić, że ten kod będzie zachowywał się tak samo, jak w Java SE?

Dodatkowa uwaga:

Inne wzory również dają ten sam wynik. Wygląda na to że,Android używa łańcucha zerowego dla niedopasowanej grupy, a Java SE używa pustego łańcucha dla niedopasowanej grupy.

Weź następujący kod.

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,"

questionAnswers(1)

yourAnswerToTheQuestion