2013-03-01 70 views
0

我有一個字符串: 「100 0 2 3.0 100 420 5.0 280 420」索尼XPERIA ACRO小號InputMismatchException時當java.util.Scanner.nextFloat()

而在代碼我做的:

Scanner s = new Scanner(walls).useDelimiter(" "); 
    while (s.hasNext()) { 
     int type = s.nextInt(); 
     int rotation = s.nextInt();    
      int actionsCount = s.nextInt(); 
      float s1 = s.nextFloat(); --> crash on Sony 
    } 

在Smsung Galaxy SII(2.3.6)和Motorolla Xoom(4.1.2)上均可正常工作。爲什麼在Sony XPERIA Acrto s Android 4.0.4上可能出現此錯誤?

03-01 11:05:42.436: E/AndroidRuntime(21019): java.util.InputMismatchException 
03-01 11:05:42.436: E/AndroidRuntime(21019): at java.util.Scanner.next(Scanner.java:1012) 
03-01 11:05:42.436: E/AndroidRuntime(21019): at java.util.Scanner.nextFloat(Scanner.java:1297) 

回答

0

問題出現在語言環境中。在索尼是Locale.RU,其中實際數字用逗號寫入,如下所示: 「100 0 2 3,0 100 420 5,0 280 420」

所以修復是使用美國語言環境。

Scanner s = new Scanner(walls).useDelimiter(" "); 
s.useLocale(Locale.US); --> need add this string 
    while (s.hasNext()) { 
     int type = s.nextInt(); 
     int rotation = s.nextInt();    
      int actionsCount = s.nextInt(); 
      float s1 = s.nextFloat(); --> And NO crash on Sony 
    }