所以现在我在尝试使用不返回任何值(无效)的方法时收到语法错误,并且接受参数ArrayList<E> fileList
。我的目标是接受一个包含String和Integer对象的文本文件,如果找到一个Integer,则在remove方法中,它将从列表中删除。这样它只会在最后离开字符串。以下代码显示了文件的读取以及我尝试使用的removeInts
方法:
@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)
收到语法错误。
答案 0 :(得分:3)
正如其他人指出的那样,您的列表永远不会包含Integer
,因为next()
会返回String
。
鉴于你的上次评论:
我正在尝试从文本文件中删除整数,只留下字符串。比方说,我有一个说
"A B C 1 2 3"
的文本文件,首先Scanner
(我需要使用扫描仪)将接收文件,并将其放入ArrayList
。然后当我使用remove
方法时,它会取出所有的整数值,而不用单独的字符串。最后的结果是"A B C"
。
不要先将它们作为整数加载,然后将其删除。相反,不要加载它们:
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]
答案 1 :(得分:2)
将removeInts的签名更改为通用:
public <E> void removeInts(ArrayList<E> fileList)