问题
I get the following error from the gps:
Fatal Exception: java.lang.NumberFormatException
Invalid double: "-٣٣٫٩٣٨٧٤"
Now this is from a error that I got from a user via Fabric. It looks like arabic so I'm guessing it only happens if you have the language set to that, or your sim card? Is it possible to force the gps to send characters in the 0-9 range? Or can I somehow fix this?
回答1:
Try this:
String number = arabicToDecimal("۴۲"); // number = 42;
private static final String arabic = "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9";
private static String arabicToDecimal(String number) {
char[] chars = new char[number.length()];
for(int i=0;i<number.length();i++) {
char ch = number.charAt(i);
if (ch >= 0x0660 && ch <= 0x0669)
ch -= 0x0660 - '0';
else if (ch >= 0x06f0 && ch <= 0x06F9)
ch -= 0x06f0 - '0';
chars[i] = ch;
}
return new String(chars);
}
回答2:
More generic solution using Character.getNumericValue(char)
static String replaceNonstandardDigits(String input) {
if (input == null || input.isEmpty()) {
return input;
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if (isNonstandardDigit(ch)) {
int numericValue = Character.getNumericValue(ch);
if (numericValue >= 0) {
builder.append(numericValue);
}
} else {
builder.append(ch);
}
}
return builder.toString();
}
private static boolean isNonstandardDigit(char ch) {
return Character.isDigit(ch) && !(ch >= '0' && ch <= '9');
}
回答3:
A modified generic solution
fun convertArabic(arabicStr: String): String? {
val chArr = arabicStr.toCharArray()
val sb = StringBuilder()
for (ch in chArr) {
if (Character.isDigit(ch)) {
sb.append(Character.getNumericValue(ch))
}else if (ch == '٫'){
sb.append(".")
}
else {
sb.append(ch)
}
}
return sb.toString()
}
The second branch is necessary as double numbers has this character as dot separator '٫'
来源:https://stackoverflow.com/questions/39385746/android-convert-arabic-number-to-english-number