使用指定的语言环境(sv)和NumberFormat将字符串解析为Long

时间:2014-10-08 10:51:00

标签: java string parsing locale

我尝试使用以下代码使用瑞典语语言环境将字符串(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 questionhttp://www.localeplanet.com/java/sv/index.html,两种情况下的分组分隔符都是一个空格()所以为什么长解析的字符串不能处理区域设置,格式正确double值存储为字符串?

3 个答案:

答案 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"在最后一行(我只使用了正常的空格)。