2013-03-01 2 views
0

У меня есть строка: "100 0 2 100 3,0 420 5,0 280 420"Sony 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 с 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

Проблема была в локали. На Sony был 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 
    }