Java: чтение целых чисел из файла в массив

Это работает для меня:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
13
задан Michael Myers 27 April 2009 в 20:28
поделиться

5 ответов

У Вас могли бы быть беспорядки между различными окончаниями строки. Файл Windows закончит каждую строку возвратом каретки и переводом строки. Некоторые программы на Unix считают тот файл, как будто это имело дополнительную пустую строку между каждой строкой, потому что это будет рассматривать возврат каретки как конец строки, и затем рассматривать перевод строки как другой конец строки.

1
ответ дан Paul Tomblin 27 April 2009 в 20:28
поделиться
  • 1
    @SpadarShut - Это doesn' t. Когда я говорю " block-level" я имею в виду эквивалентный HTML4 DTD' определение s %block; объекта, не свойство дисплея CSS. HTML5 doesn' t действительно имеют то же понятие, но flow content elements that aren't also phrasing content elements довольно подобно. – Alohci 14 January 2013 в 13:40

Похоже, что Java пытается преобразовать пустую строку в число. У Вас есть пустая строка в конце серии чисел?

Вы могли, вероятно, зафиксировать код как это

String s = in.readLine();
int i = 0;

while (s != null) {
    // Skip empty lines.
    s = s.trim();
    if (s.length() == 0) {
        continue;
    }

    tall[i] = Integer.parseInt(s); // This is line 19.
    System.out.println(tall[i]);
    s = in.readLine();
    i++;
}

in.close();
2
ответ дан Yojimbo 27 April 2009 в 20:28
поделиться
  • 1
    С тех пор, во сколько сделал изменение element' s свойство дисплея привел к chage правил парсинга HTML? Вы хотите сказать помещение div внутренняя часть a, пустошь на самом деле заставляет a быть в div также? jsfiddle.net/ufmnb – Spadar Shut 14 January 2013 в 13:27

У Вас должна быть пустая строка в Вашем файле.

можно хотеть обернуть вызовы parseInt в блок "попытки":

try {
  tall[i++] = Integer.parseInt(s);
}
catch (NumberFormatException ex) {
  continue;
}

Или просто проверяют на пустые строки перед парсингом:

if (s.length() == 0) 
  continue;

Примечание, что путем инициализации индексной переменной i внутренняя часть цикл, это всегда 0. Необходимо переместить объявление перед while цикл. (Или сделайте его частью for цикл.)

9
ответ дан erickson 27 April 2009 в 20:28
поделиться
  • 1
    @SteveFaulkner, документ, который Вы цитируете здесь, говорит: “It является несоответствующим для цитирования этого документа в качестве кроме происходящей работы. ” (Кроме того, на данный момент, это не описывает main элемент, но вместо этого перечисляет основное содержание под идиомами “Common без специализированного elements”.) – Jukka K. Korpela 20 December 2012 в 23:21

Вы могли бы хотеть сделать что-то вроде этого (если Вы находитесь в java 5 &)

Scanner scanner = new Scanner(new File("tall.txt"));
int [] tall = new int [100];
int i = 0;
while(scanner.hasNextInt()){
   tall[i++] = scanner.nextInt();
}
43
ответ дан Julien Grenier 27 April 2009 в 20:28
поделиться

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

File file = new File("Tall.txt");
byte[] bytes = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(bytes);
fis.close();
String[] valueStr = new String(bytes).trim().split("\\s+");
int[] tall = new int[valueStr.length];
for (int i = 0; i < valueStr.length; i++) 
    tall[i] = Integer.parseInt(valueStr[i]);
System.out.println(Arrays.asList(tall));
3
ответ дан 1 December 2019 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: