почему метод Integer.parseInt не работает для разделенных строк? - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь извлечь числа из строк с указанным c форматом, используя метод разделения строк. тогда я хочу получить числа в виде типа int, используя метод Integer parseInt. Вот пример кода, который не работает. Может ли кто-нибудь помочь мне с этим, пожалуйста?

String g = "hi5hi6";

String[] l = new String[2];
l = g.split("hi");

for (String k : l) {
    int p=Integer.parseInt(k);
    System.out.println(p);
}

Я получаю эту ошибку:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:592)
at java.lang.Integer.parseInt(Integer.java:615)
at com.company.Main.main(Main.java:36)

Ответы [ 3 ]

2 голосов
/ 28 февраля 2020

Проблема здесь в том, что String#split покидает ваш массив с одним или несколькими пустыми элементами. Просто отфильтруйте их, и это должно работать:

String g = "hi5hi6";
String[] parts = g.split("hi");

for (String part : parts) {
    if (!part.isEmpty()) {
        int p = Integer.parseInt(part);
        System.out.println(p);
    }
}

Это печатает:

5
6
1 голос
/ 28 февраля 2020

Это элементы в вашем массиве [, 5, 6] вы видите проблему? Первый элемент - пустой.

Попробуйте:

String[] l = new String[2];
l = g.split("hi");

for (String k : l) {
    if (!k.isEmpty()) {
        int p=Integer.parseInt(k);
        System.out.println(p);
    }
}
0 голосов
/ 28 февраля 2020

Integer.ParseInt всегда выдаст вам исключение числового формата, если оно не отформатировано. Это исключение UnChecked, поэтому программист должен справиться с этим.

 String g="hi5hi6";
 String[] l=new String[2];
 l=g.split("hi");

 for(String k:l){
   try
   {
      if (!part.isEmpty()) {
         //the String to int conversion happens here
         int p=Integer.parseInt(k.trim());
         //print out the value after the conversion
         System.out.println(p);
     }
  }
  catch (NumberFormatException nfe)
  {
     System.out.println("NumberFormatException: " + nfe.getMessage());
  }

}
...