我有一个 android 应用程序,今天我收到了一份崩溃报告,其中包含以下内容:
当应用程序尝试解析用户提供的字符串编号时会触发此异常。
很明显,问题是应用程序无法解析印地语数字!那么,我该如何解决呢?
如果您想匹配任何 unicode 数字,使用正则表达式会更好。正则表达式将是\\p{N}+
,这里是如何使用它:
Matcher m=Pattern.compile("\\p{N}+").matcher(input);
if(m.find())
{
System.out.println(m.group());
}
要回答您的问题,您应该使用docs中提到的NumberFormat。为指定一个。Locale
NumberFormat
NumberFormat nf = NumberFormat.getInstance(new Locale("hi", "IN"));
nf.parse(input);
您可以使用Character.getNumericValue(char)。
这种方法的好处是它可以做你需要的事情。
但是要有效地工作,您应该在您的应用程序中实现对本地的支持。
NumberFormat format = NumberFormat.getInstance(new Locale("hin","IND"));
Number parse = format.parse("१");
System.out.println(parse);
打印1
。
尝试这个。这将删除非数字字符。
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher(str); // str is input String
while(m.find()) {
System.out.println(m.group(1));
}
如果您正在处理double
(带小数位)。你可以试试这个
String text = "123.0114cc";
String numOnly = text.replaceAll("\\p{Alpha}","");
double numVal = Double.valueOf(numOnly);
System.out.println(numVal);
利用
BigDecimal bigDecimal = new BigDecimal(YOUR_VALUE);
在应用正则表达式之前,因为 BigDecimal 支持 12 个整数、12.35 个小数和 12 个 $ 货币、12% 百分比及其本地化值。
您可以使用以下方法接收字符串并将其中的每个印度数字转换为阿拉伯语。
public static String convertAllIndianToArabic(String str)
{
for(int i=0; i<str.length(); i++)
{
if(str.charAt(i)=='٠')
str = str.substring(0, i)+"0"+str.substring(i+1);
else if(str.charAt(i)=='١')
str = str.substring(0, i)+"1"+str.substring(i+1);
else if(str.charAt(i)=='٢')
str = str.substring(0, i)+"2"+str.substring(i+1);
else if(str.charAt(i)=='٣')
str = str.substring(0, i)+"3"+str.substring(i+1);
else if(str.charAt(i)=='٤')
str = str.substring(0, i)+"4"+str.substring(i+1);
else if(str.charAt(i)=='٥')
str = str.substring(0, i)+"5"+str.substring(i+1);
else if(str.charAt(i)=='٦')
str = str.substring(0, i)+"6"+str.substring(i+1);
else if(str.charAt(i)=='٧')
str = str.substring(0, i)+"7"+str.substring(i+1);
else if(str.charAt(i)=='٨')
str = str.substring(0, i)+"8"+str.substring(i+1);
else if(str.charAt(i)=='٩')
str = str.substring(0, i)+"9"+str.substring(i+1);
}
return str;
}