Различные результаты регулярных выражений в Java SE и платформе Android
У меня есть следующееJava SE код, который работает на ПК
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);
}
Я получаю ожидаемый результат
"SAN","Banco Santander, ","NYSE"
"SAN","Banco Santander ","NYSE"
Тем не менее, когда доходит доAndroid.
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);
Я получаю
"SAN","Banco Santander, ","NYSE"
"SAN","Banco Santandernull ","NYSE"
Любое предложение и обходной путь, как я могу сделать этот код ведет себя так же, как в Java SE?
Дополнительное примечание:Другие шаблоны также дают тот же результат. Кажется, что,Android использует пустую строку для несопоставленной группы, а Java SE использует пустую строку для несопоставленной группы.
Возьми следующий код.
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,"