[英]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.html和http://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.