2015-09-14 2 views
0

Так что прямо сейчас я получаю синтаксическую ошибку, когда пытаюсь использовать метод, который не возвращает какое-либо значение (пустое), и принимает аргументы ArrayList<E> fileList. Моя цель - взять текстовый файл с объектами String и Integer, а в методе remove, если он найдет Integer, он будет удален из списка. Это значит, что он оставит только строки в конце. Вот код, который показывает, как чтение файла, и removeInts метод, который я пытаюсь использовать:Получение ошибки синтаксиса при попытке использовать метод с использованием ArrayLists?

@SuppressWarnings("unchecked") //IDE told me to add this for adding objects to the ArrayList 
public <E> ArrayList<E> readFile(){ 
    ArrayList<E> fileList = new ArrayList<E>(); 
    try { 
     Scanner read = new Scanner(file); //would not let me do this without error handling 
     while(read.hasNext()){ //while there is still stuff to add it will keep filling up the ArrayList 
      fileList.add((E)read.next()); 
     } 
    } catch (FileNotFoundException e) { 
     System.out.println("File not found!"); 
     e.printStackTrace(); 
    } 
    removeInts(fileList); 
    return fileList;  
} 

public void removeInts(ArrayList<E> fileList){ 
    for(int i = 0; i < fileList.size(); i++){ 
     if(fileList.get(i) instanceof Integer){ 
      fileList.remove(i); 
     } 
     else{ 
      //does nothing, does not remove the object if it is a string 
     } 
    } 

Я получаю синтаксическую ошибку в removeInts(fileList).

+4

Пожалуйста, всегда вывешиваем полное сообщение об ошибке, слово в слово с вашим вопросом. –

+0

Обратите внимание, что 'read.next()' * always * возвращает 'String'. В этом списке никогда не будет никаких объектов Integer. – RealSkeptic

+1

Этот код не имеет большого смысла. Scanner.next() возвращает String, а не E. Поэтому в списке никогда не будет целых чисел, и метод должен вернуть список . Вы не должны игнорировать предупреждения компилятора. Они говорят вам, что ваш код неправильный. –

ответ

2

Изменить подпись removeInts порождающая:

public <E> void removeInts(ArrayList<E> fileList) 
+0

Ничего себе, это было просто. Спасибо за помощь. – FyreeW

+0

Я рад помочь! Пожалуйста, примите ответ, если он решил это –

3

Как другие отметили, список никогда не будет содержать Integer, потому что next() возвращает String.

Учитывая ваш последний комментарий:

Я пытаюсь быть в состоянии удалить Интс из текстового файла, оставив только строки влево. Скажем, например, у меня был текстовый файл, который сказал "A B C 1 2 3", сначала Scanner (мне нужно использовать сканер), чтобы взять файл и поместить его в ArrayList. Затем, когда я использую метод remove, он выведет все значения, которые являются целыми, и оставит в силе строки. Конечным результатом в конце будет "A B C".

Не загружайте их сначала как Integer, а затем удаляйте. Вместо этого, не загружайте их:

List<String> list = new ArrayList<>(); 
try (Scanner sc = new Scanner("A B C 1 2 3")) { 
    while (sc.hasNext()) { 
     if (sc.hasNextInt()) 
      sc.nextInt(); // get and discard 
     else 
      list.add(sc.next()); 
    } 
} 
System.out.println(list); 

Выход

[A, B, C] 
+0

Есть ли причина, по которой он выводит это первое, а затем что находится в текстовом файле? [{\ rtf1 \ ansi \ ansicpg1252 \ cocoartf1348 \ cocoasubrtf170, {\ fonttbl \ f0 \ fswiss \ fcharset0, Helvetica;}, {\ colortbl; \ red255 \ green255 \ blue255;}, \ margl1440 \ margr1440 \ vieww10800 \ viewh8400 \ viewkind0 , \ pard \ tx720 \ tx1440 \ tx2160 \ tx2880 \ tx3600 \ tx4320 \ tx5040 \ tx5760 \ tx6480 \ tx7200 \ tx7920 \ tx8640 \ pardirnatural, \ f0 \ fs24, \ cf0, – FyreeW

+1

@FyreeW Ваш файл был сохранен как [RTF-файл ] (https://en.wikipedia.org/wiki/Rich_Text_Format). Сохраните его как обычный текстовый файл. – Andreas

+0

Изменил файл .txt, после чего работал. Спасибо @ Andreas за это. – FyreeW

Смежные вопросы