В Java, как мне читать строки и парные пары из одного и того же файла txt? [Дубликат]

Другим случаем, когда NullReferenceExceptions может случиться, является (неправильное) использование оператора as :

class Book {
    public string Name { get; set; }
}
class Car { }

Car mycar = new Car();
Book mybook = mycar as Book;   // Incompatible conversion --> mybook = null

Console.WriteLine(mybook.Name);   // NullReferenceException

Здесь Book и Car являются несовместимыми типами; a Car не может быть преобразован / передан в Book. Когда этот сбой завершается неудачно, as возвращает null. Используя mybook после этого, вы вызываете NullReferenceException.

В общем случае вы должны использовать cast или as, как показано ниже:

Если вы ожидаете преобразования типа в всегда преуспевает (т. е. вы знаете, какой объект должен быть впереди времени), тогда вы должны использовать cast:

ComicBook cb = (ComicBook)specificBook;

Если вы не уверены в типе, но хотите попробовать , чтобы использовать его как определенный тип, затем используйте as:

ComicBook cb = specificBook as ComicBook;
if (cb != null) {
   // ...
}

2
задан Nick Garvey 22 November 2011 в 17:02
поделиться

3 ответа

Я настоятельно рекомендую вам использовать класс Scanner. Этот класс предоставляет вам такие методы, как nextInt и т. Д.

Вы можете использовать его для чтения из файла прямо следующим образом:

Scanner s = new Scanner(new File("People.txt"));

while (s.hasNext()) {
    people[i].addName(s.next());
    people[i].addBookNo(s.nextInt());
    people[i].addRating(s.nextInt());
}

(Просто понял, что у вас могут быть пробелы в названии. Это немного усложняет ситуацию, но я все равно буду рассматривать использование сканера.)

Альтернативным решением было бы использовать регулярное выражение и группы для синтаксического анализа части. Что-то вроде этого должно делать:

(.*?)\s+(\d+)\s+(\d+)
5
ответ дан aioobe 25 August 2018 в 12:41
поделиться

Следующее регулярное выражение работает в этих 3 случаях, разбивая их на 3 сопоставленные группы.

Regex (.*)\s+(\d+)\s+(\d+)

Случаи

Francis Bacon  50    2
Jill St. John 20 20
St. Francis Xavier III 3 3 
1
ответ дан EdgeCase 25 August 2018 в 12:41
поделиться

Если вы хотите сделать это, вы можете попробовать сделать это следующим образом:

  1. Исправление того, как данные будут присутствовать в файле, скажем firstName.lastName.age.number;
  2. Затем вы можете написать код для чтения данных. и сохраните его в переменной (вы будете знать, для чего она предназначена) и после «;» будет вторая запись.
0
ответ дан gprathour 25 August 2018 в 12:41
поделиться
Другие вопросы по тегам:

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