簡體   English   中英

使用指定的語言環境(sv)和NumberFormat將字符串解析為Long

[英]Parse String to Long using a specified locale (sv) and NumberFormat

我嘗試使用以下代碼使用瑞典語語言環境將字符串(14 123)解析為java中的長字符串:

String longString = "14 123"
NumberFormat swedishNumberFormat = NumberFormat.getInstance(new Locale("sv"));
System.out.println(swedishNumberFormat.parse(longString).longValue());

此代碼的輸出為14(應為14123)。 根據這個問題,我嘗試了sv和sv_SE語言環境,但這次結果在兩種情況下都是相同的。

根據http://www.localeplanet.com/java/sv/index.htmlhttp://www.localeplanet.com/java/sv-SE/index.html ,兩種情況下的分組分隔符都是一個空格( )那么為什么長字解析的字符串不處理,對於語言環境,正確格式化的雙值存儲為字符串?

瑞典人,也像法國人一樣,需要努力。 不間斷的空間。

longString = longString.replace(' ', '\u00a0');

繁瑣。

你能試試嗎?

通過手動設置DecimalFormat來解析該字符串。 構造它,配置為具有setGroupingUsed(true ), setDecimalSymbols與您自己的DecimalFormatSymbols

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。

正如看到的這個帖子 ,你需要手動設置空格作為分隔符。

 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在他的回答中所說,String需要使用一個堅硬的,不間斷的空間( '\ ' )而不是簡單的空格。 這就是我的例子在最后一行返回“123”的原因(我只使用了普通的空格)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM