我从gps中收到以下错误:
Fatal Exception: java.lang.NumberFormatException
Invalid double: "-٣٣٫٩٣٨٧٤"
现在这是我从用户通过Fabric获得的错误。它看起来像阿拉伯语所以我猜它只会发生在你设置语言或你的SIM卡的情况下? 是否可以强制gps发送0-9范围内的字符? 或者我能以某种方式解决这个问题吗?
答案 0 :(得分:11)
试试这个:
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);
}
答案 1 :(得分:2)
改良的通用解决方案
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()
}
第二分支是必需的,因为双精度数字具有点分隔符 '。' >
答案 2 :(得分:1)
Kotlin 开发人员:
fun ArabicToEnglish(str: String):String {
var result = ""
var en = '0'
for (ch in str) {
en = ch
when (ch) {
'۰' -> en = '0'
'۱' -> en = '1'
'۲' -> en = '2'
'۳' -> en = '3'
'۴' -> en = '4'
'۵' -> en = '5'
'۶' -> en = '6'
'۷' -> en = '7'
'۸' -> en = '8'
'۹' -> en = '9'
}
result = "${result}$en"
}
return result
}
答案 3 :(得分:0)
使用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');
}
答案 4 :(得分:0)
这是我将英文数字转换为阿拉伯数字的代码,解决方案可以优化,根据您的需要进行修改,适用于所有数字。
fun englishNumberToArabicNumber(number: Int): String {
val arabicNumber = mutableListOf<String>()
for (element in number.toString()) {
when (element) {
'1' -> arabicNumber.add("١")
'2' -> arabicNumber.add("٢")
'3' -> arabicNumber.add("٣")
'4' -> arabicNumber.add("٤")
'5' -> arabicNumber.add("٥")
'6' -> arabicNumber.add("٦")
'7' -> arabicNumber.add("٧")
'8' -> arabicNumber.add("٨")
'9' -> arabicNumber.add("٩")
else -> arabicNumber.add("٠")
}
}
return arabicNumber.toString()
.replace("[", "")
.replace("]", "")
.replace(",", "")
.replace(" ", "")
}