Android中DecimalFormatSymbols获取分隔符返回',44',如何修正并适配欧洲地区?
解决Android EditText欧洲地区小数点分隔符问题
我来帮你搞定这个EditText的小数点分隔符问题!首先得澄清一个你可能误解的点:你看到的',44'并不是方法返回了奇怪的字符串——getDecimalSeparator()返回的是单个char类型的分隔符,调试时显示的,44其实是逗号字符(ASCII码值为44)的调试表现,实际它就是单个的,,你可以用Log.d("Separator", String.valueOf(separator))打印出来验证,肯定是纯逗号。
不过你的需求是「仅欧洲地区使用','替代'.'」,所以我们需要在代码里做区域判断,确保只有欧洲区域才切换分隔符,同时正确配置DigitsKeyListener。下面是修正后的完整方案:
步骤1:定义欧洲国家的ISO代码列表
先整理一份你需要覆盖的欧洲国家ISO代码(可以根据业务需求补充或调整):
private static final Set<String> EUROPEAN_COUNTRIES = new HashSet<>(Arrays.asList( "AT", "BE", "BG", "HR", "CY", "CZ", "DK", "EE", "FI", "FR", "DE", "GR", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL", "PL", "PT", "RO", "SK", "SI", "ES", "SE", "CH", "GB" ));
步骤2:根据区域获取正确的分隔符
通过当前系统Locale判断是否属于欧洲区域,再获取对应的分隔符:
// 获取当前系统的区域设置 Locale currentLocale = Locale.getDefault(); char decimalSeparator = '.'; // 默认使用英文小数点 // 判断当前区域是否为欧洲国家 if (EUROPEAN_COUNTRIES.contains(currentLocale.getCountry())) { // 获取对应区域的小数点分隔符 decimalSeparator = DecimalFormatSymbols.getInstance(currentLocale).getDecimalSeparator(); } // 给EditText设置DigitsKeyListener mWeightEditText.setKeyListener(DigitsKeyListener.getInstance("0123456789" + decimalSeparator));
额外说明
- 关于调试时的
,44:这是IDE调试工具对char类型的显示方式,把字符和它的ASCII码值一起展示了,实际变量里存储的就是单个逗号字符,完全可以正常使用。 - 欧洲国家列表:如果你的业务需要覆盖更多欧洲国家,可以在集合里补充对应的ISO 3166-1两位国家代码。
- 兼容性:这个方案适配Android全版本,因为
DecimalFormatSymbols和Locale的相关方法都是API 1就存在的。
内容的提问来源于stack exchange,提问作者Jayasree
相关产品推荐
相关产品推荐

