2014-01-23 4 views
0

У меня были проблемы со стрессом весь день в этой программе, чтобы читать текстовый файл для целых чисел и хранить целые числа в массиве. Я подумал, что, наконец, получил решение с приведенным ниже кодом.Чтение целых чисел из текстового файла и сохранение в массив

Но, к сожалению, мне нужно прокрутить файл с помощью метода hasNextLine(). Затем с помощью nextInt() можно читать целые числа из файла и хранить их в массиве. Итак, используя конструктор сканера, hasNextLine(), next() и nextInt().

Затем используйте . Попробуйте и поймайте, чтобы определить, какие слова являются целыми числами, а не с помощью исключения InputMismatchException. Также исключение для пустых строк в файле? Проблема в том, что я не использовал попытку, уловку и исключения, поскольку я просто пропустил не-ints. Кроме того, я использую массив int, поэтому я хочу сделать это без списка.

 public static void main(String[] commandlineArgument) { 
     Integer[] array = ReadFile4.readFileReturnIntegers(commandlineArgument[0]); 
     ReadFile4.printArrayAndIntegerCount(array, commandlineArgument[0]); 
     } 

     public static Integer[] readFileReturnIntegers(String filename) { 
     Integer[] array = new Integer[1000]; 
     int i = 0; 
     //connect to the file 
     File file = new File(filename); 
     Scanner inputFile = null; 
     try { 
      inputFile = new Scanner(file); 
     } 
     //If file not found-error message 
      catch (FileNotFoundException Exception) { 
       System.out.println("File not found!"); 
      } 
     //if connected, read file 
     if (inputFile != null) { 
     // loop through file for integers and store in array 
      try { 
       while (inputFile.hasNext()) { 
        if (inputFile.hasNextInt()) { 
        array[i] = inputFile.nextInt(); 
        i++; 
        } 
        else { 
        inputFile.next(); 
        } 
       } 
      } 
      finally { 
       inputFile.close(); 
      } 
      System.out.println(i); 
      for (int v = 0; v < i; v++) { 
       System.out.println(array[v]); 
      } 
     } 
     return array; 
     } 

     public static void printArrayAndIntegerCount(Integer[] array, String filename) { 
     //print number of integers 
     //print all integers that are stored in array 
     } 
    } 

Тогда я буду печатать все в своем 2-м методе, но об этом я буду беспокоиться позже. : О

Пример Содержание текстового файла:

Name, Number 
natto, 3 
eggs, 12 
shiitake, 1 
negi, 1 
garlic, 5 
umeboshi, 1 

Пример вывода Цель:

number of integers in file "groceries.csv" = 6 
    index = 0, element = 3 
    index = 1, element = 12 
    index = 2, element = 1 
    index = 3, element = 1 
    index = 4, element = 5 
    index = 5, element = 1 

Извините за аналогичный вопрос. Я очень подчеркнуты, и даже больше, что я делал все это неправильно ... Я полностью застрял в этот момент :(

+0

Вы должны прочитать [это] (http://stackoverflow.com/a/21300653/2970947) ответить еще раз. Особенно 'printf' в конце. –

+0

Является ли использование массива абсолютно обязательным? Вам лучше использовать реализацию «List» (например, ArrayList): таким образом, вы не обязаны объявлять свой размер в начале, и вам не нужно управлять индексом предметов, которые вы вложили в него. –

+0

К сожалению, я должен использовать массив для этой программы. –

ответ

0

Вот один из способов удовлетворения новых требований,

public static Integer[] readFileReturnIntegers(
    String filename) { 
    Integer[] temp = new Integer[1000]; 
    int i = 0; 
    // connect to the file 
    File file = new File(filename); 
    Scanner inputFile = null; 
    try { 
    inputFile = new Scanner(file); 
    } 
    // If file not found-error message 
    catch (FileNotFoundException Exception) { 
    System.out.println("File not found!"); 
    } 
    // if connected, read file 
    if (inputFile != null) { 
    // loop through file for integers and store in array 
    try { 
     while (inputFile.hasNext()) { 
     try { 
      temp[i] = inputFile.nextInt(); 
      i++; 
     } catch (InputMismatchException e) { 
      inputFile.next(); 
     } 
     } 
    } finally { 
     inputFile.close(); 
    } 
    Integer[] array = new Integer[i]; 
    System.arraycopy(temp, 0, array, 0, i); 
    return array; 
    } 
    return new Integer[] {}; 
} 

public static void printArrayAndIntegerCount(
    Integer[] array, String filename) { 
    System.out.printf(
     "number of integers in file \"%s\" = %d\n", 
     filename, array.length); 
    for (int i = 0; i < array.length; i++) { 
    System.out.printf(
     "\tindex = %d, element = %d\n", i, array[i]); 
    } 
} 

Выходы

number of integers in file "/home/efrisch/groceries.csv" = 6 
    index = 0, element = 3 
    index = 1, element = 12 
    index = 2, element = 1 
    index = 3, element = 1 
    index = 4, element = 5 
    index = 5, element = 1 
+0

Мне удалось это понять и правильно закончить свою программу! Спасибо, Эллиот! Буквально спас меня от бессонной ночи! Я так счастлив! –

1

Вы можете прочитать Ваш файл таким образом.

/* using Scanner */ 
public static Integer[] getIntsFromFileUsingScanner(String file) throws IOException { 
    List<Integer> l = new ArrayList<Integer>(); 
    InputStream in = new FileInputStream(file); 
    Scanner s = new Scanner(in); 
    while(s.hasNext()) { 
     try { 
      Integer i = s.nextInt(); 
      l.add(i); 
     } catch (InputMismatchException e) { 
      s.next(); 
     } 
    } 
    in.close(); 
    return l.toArray(new Integer[l.size()]); 
} 

/* using BufferedReader */ 
public static Integer[] getIntsFromFile(String file) throws IOException { 
    List<Integer> l = new ArrayList<Integer>(); 
    BufferedReader reader = new BufferedReader(new FileReader(file)); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     try { 
      l.add(Integer.parseInt(line.split(",")[1])); 
     } catch (NumberFormatException e) { 
     } 
    } 
    return l.toArray(new Integer[l.size()]); 
}  

И с кодом:

public static void main(String[] commandlineArgument) { 
     Integer[] array = getIntsFromFileUsingScanner(commandlineArgument[0]); 
     ReadFile4.printArrayAndIntegerCount(array, commandlineArgument[0]); 
    } 
+0

Эй, спасибо, за ваш вклад. Но я пытаюсь выполнить цикл с использованием конструкторов Scanner, методов hasNextLine(), next() и nextInt(). И самое главное использовать попытку и уловить для вводаmismatchexception. Так нет списка и bufferedReader :( –

+0

обновил мой ответ;) – marioosh

0

Возможно, вы можете решить эту проблему кратким кодом, как я размещаю ниже.

public static List<Integer> readInteger(String path) throws IOException { 
    List<Integer> result = new ArrayList<Integer>(); 
    BufferedReader reader = new BufferedReader(new FileReader(path)); 
    String line = null; 
    Pattern pattern = Pattern.compile("\\d+"); 
    Matcher matcher = null; 
    line = reader.readLine(); 
    String input = null; 
    while(line != null) { 
     input = line.split(",")[1].trim(); 
     matcher = pattern.matcher(input); 
     if(matcher.matches()) { 
      result.add(Integer.valueOf(input)); 
     } 
     line = reader.readLine(); 
    } 
    reader.close(); 
    return result; 
} 
0

Вложите попытка поймать для кода ниже:

try 
{ 
    if (inputFile.hasNextInt()) { 
     array[i] = inputFile.nextInt(); 
     i++; 
    } 
    else { 
     inputFile.next(); 
     } 
}catch(Exception e) 
{ 
    // handle the exception 
} 
Смежные вопросы