我尝试使用以下代码使用瑞典语语言环境将字符串(14 123)解析为java中的长字符串:
String longString = "14 123"
NumberFormat swedishNumberFormat = NumberFormat.getInstance(new Locale("sv"));
System.out.println(swedishNumberFormat.parse(longString).longValue());
此代码的输出为14(应为14123)。根据{{3}},我尝试使用sv和sv_SE语言环境,但这次结果在两种情况下都是相同的。
根据this question和http://www.localeplanet.com/java/sv/index.html,两种情况下的分组分隔符都是一个空格()所以为什么长解析的字符串不能处理区域设置,格式正确double值存储为字符串?
答案 0 :(得分:13)
瑞典人,也像法国人一样,需要努力。不间断的空间。
longString = longString.replace(' ', '\u00a0');
繁琐。
答案 1 :(得分:0)
你能试试吗
通过手动设置DecimalFormat来解析该字符串。构造它,使用您自己的 DecimalFormatSymbols 配置 setGroupingUsed(true ), setDecimalSymbols 。
DecimalFormat df=new DecimalFormat();
df.setGroupingSize(3);
df.setGroupingUsed(true);
DecimalFormatSymbols newSymbols=new DecimalFormatSymbols();
newSymbols.setGroupingSeparator(' ');
df.setDecimalFormatSymbols(newSymbols);
df.parse(longString)
第二个选项是调试代码,请参阅swedishNumberFormat实例。检查字段groupingSize,decimalFormatSymbols.groupingSeparators。
答案 2 :(得分:0)
如this post所示,您需要手动将空格设置为分隔符。
try {
String longString = "14 123";
DecimalFormat decimalFormat = new DecimalFormat(); // instead of NumberFormat, use DecimalFormat
DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale("sv", "SE"));
symbols.setGroupingSeparator(' '); // set the whitespace manually as grouping seperator
decimalFormat.setDecimalFormatSymbols(symbols);
System.out.println(svSE.parse(longString));
} catch (ParseException ex) {
Logger.getLogger(Playground.class.getName()).log(Level.SEVERE, null, ex);
}
//> output is 14123
老实说我有点困惑,但我认为问题是,你需要格式化字符串(显然不是每个空格在这里都是一样的)
try {
long testNumber = 123987l;
NumberFormat swedishNumberFormat = NumberFormat.getInstance(new Locale("sv"));
//here I format the number into a String
String formatedString = swedishNumberFormat.format(testNumber);
System.out.println(formatedString); // result: "123 987"
// when parsing the formated String back into a number
System.out.println(swedishNumberFormat.parse(formatedString)); // result: "123987"
// but when parsing a non formated string like this one
System.out.println(swedishNumberFormat.parse("123 987")); // result "123"
} catch (ParseException ex) {
Logger.getLogger(Playground.class.getName()).log(Level.SEVERE, null, ex);
}
如果我在这里错了或者我的例子不起作用,请纠正我。我不知道为什么它会这样做,但为了避免混淆上述情况,您可能需要手动设置分隔符。
修改强>
正如Joop Eggen在他的answer中所说,String需要使用一个坚硬的,不间断的空间('\u00a0'
)而不是简单的空格。这就是我的例子返回" 123"在最后一行(我只使用了正常的空格)。