Чтение из текстового файла с пробелами и последующее размещение в arrayList
Я провел последнюю неделю, пытаясь понять, как заставить этот глупый код работать. Мне удалось заставить все работать, кроме чтения из моего текстового файла. Он может прочитать отдельное целое число в строке, но когда ему дается строка с несколькими целыми числами, разделенными пробелами, он выходит из строя. Теперь я пошел и попытался это исправить, и код даже не будет компилироваться. Только одна строка вызывает проблемы. Я не очень хорош в кодировании, поэтому я не знаю, с чего начать. Да, я посмотрел это онлайн. Да, я проверил форумы. Да, я пробовал несколько разных способов, чтобы заставить это работать.... Как я могу это исправить??:(
ArrayList<Integer> list = new ArrayList<Integer>();
// the above line is in a different method in the same class, but it's relevant here
File file = new File("C:\\Users\\Jocelynn\\Desktop\\input.txt");
BufferedReader reader = null;
try
{
reader = new BufferedReader(new FileReader(file));
String text = null;
while ((text = reader.readLine()) != null)
{
// I want the following line to read "218 150 500 330", and to store each individual integer into the list. I don't know why it won't work :(
list.add(Integer.parseInt(src.next().trim()));
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
reader.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//print out the list
System.out.println(list);
Спасибо вам за помощь! Я уверен, что мне просто не хватает чего-то действительно простого...
3 ответа
Вы можете использовать Scanner(String)
лайк
while ((text = reader.readLine()) != null) {
Scanner scanner = new Scanner(text);
while (scanner.hasNextInt()) {
list.add(scanner.nextInt());
}
}
Конечно, весь ваш метод может быть упрощен с помощью try-with-resources
Заявление и diamond operator
и просто Scanner(File)
лайк
public static void main(String[] args) {
File file = new File("C:\\Users\\Jocelynn\\Desktop\\input.txt");
List<Integer> list = new ArrayList<>();
try (Scanner scanner = new Scanner(file);) {
while (scanner.hasNextInt()) {
list.add(scanner.nextInt());
}
} catch (Exception e) {
e.printStackTrace();
}
// print out the list
System.out.println(list);
}
Сделайте это внутри цикла while
String[] individualArray = text.split(" ");//note space
for(String individual:individualArray){
yourList.add(individual);//You need to parse it to integer here as you have already done
}
В приведенном выше коде IndividualArray будет содержать все отдельные целые числа, которые separated by space
, А внутри цикла for каждая строка должна быть проанализирована до целого числа, а затем добавлена в ваш список
Попробуй это:
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
File file = new File("C:\\Users\\Jocelynn\\Desktop\\input.txt");
BufferedReader reader = null;
try
{
reader = new BufferedReader(new FileReader(file));
String text = null;
while ((text = reader.readLine()) != null)
{
// you need only this for loop in you code.
for (String value : text.split(" ")) { // get list of integer
if(!value.equals("")) // ignore space
list.add(Integer.parseInt(value)); // add to list
}
}
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
try
{
reader.close();
} catch (IOException e)
{
e.printStackTrace();
}
// print out the list
System.out.println(list);
}