gpt4 book ai didi

java - 文本文件转换为数组列表时出现问题

转载 作者:行者123 更新时间:2023-12-01 12:40:05 26 4
gpt4 key购买 nike

如果解决方案相对明显,我提前道歉;然而,我高中的 AP compsci 类(class)几乎不涉及 IO 或文件组件。我一直在尝试编写一个基本的抽认卡程序 - 因此从文本文件中读取字符串比向数组添加 100 个对象要实用得多。我的问题是,当我最后检查 ArrayList 的大小和内容时,它是空的。我的源码如下:

public class IOReader
{
static ArrayList<FlashCard> cards = new ArrayList<FlashCard>();
static File file = new File("temp.txt");

public static void fillArray() throws FileNotFoundException, IOException
{
FileInputStream fiStream = new FileInputStream(file);
if(file.exists())
{
try( BufferedReader br = new BufferedReader( new InputStreamReader(fiStream) )
{
String line;
String[] seperated;
while( (line = br.readLine()) != null)
{
try
{
seperated = line.split(":");
String foreign = seperated[0];
String english = seperated[1];
cards.add( new FlashCard(foreign, english) );
System.out.println(foreign + " : " + english);
}
catch(NumberFormatException | NullPointerException | ArrayIndexOutOfBoundsException e)
{
e.printStackTrace();
}
finally{
br.close();
}
}
}
}
else{
System.err.print("File not found");
throw new FileNotFoundException();
}
}
public static void main(String[] args)
{
try{
fillArray();
}
catch (Exception e){}
for(FlashCard card: cards)
System.out.println( card.toString() );
System.out.print( cards.size() );
}
}

我的文本文件如下所示:

Volare : To Fly
Velle : To Wish
Facere : To Do / Make
Trahere : To Spin / Drag
Odisse : To Hate
... et alia

我的FlashCard类非常简单;它只需要两个字符串作为参数。但问题是,每当我运行此命令时,除了 main 方法中打印的 0 之外,没有任何内容打印,表明 ArrayList 为空。我提前感谢您提供任何帮助,我们将不胜感激。

最佳答案

需要考虑的一些要点:

  1. 在您的 fillArray() 中可以很好地抛出异常并在代理内部捕获它们程序的一部分是 main(),因此 fillArray() 中的代码会更多可读,并且您不会隐藏异常。
  2. 我认为没有必要检查文件是否存在,因为如果不存在存在,异常将被抛出,main()函数将使用它。
  3. 我使用 Igal 类而不是 FlashCard 类,它与您的 FlashCard 类相同

Igal 类代码:

public class Igal {
private String st1;
private String st2;

public Igal(String s1, String s2){
st1 = s1;
st2 = s2;
}



/**
* @return the st1
*/
public String getSt1() {
return st1;
}

/**
* @param st1 the st1 to set
*/
public void setSt1(String st1) {
this.st1 = st1;
}

/**
* @return the st2
*/
public String getSt2() {
return st2;
}

/**
* @param st2 the st2 to set
*/
public void setSt2(String st2) {
this.st2 = st2;
}

@Override
public String toString(){
return getSt1() + " " + getSt2();
}

}

代码:

static List<Igal> cards = new ArrayList<>();
static File file = new File("C:\\Users\\xxx\\Documents\\NetBeansProjects\\Dictionary\\src\\temp.txt");

public static void fillArray() throws FileNotFoundException, IOException {

FileInputStream fiStream = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fiStream));
String line;
String[] seperated;

while ((line = br.readLine()) != null) {
seperated = line.split(":");
String foreign = seperated[0];
String english = seperated[1];
System.out.println(foreign + " : " + english);
Igal fc = new Igal(foreign, english);
cards.add(fc);
}
}

public static void main(String[] args) {
try {
fillArray();
} catch (IOException e) {
System.out.println(e);
}
System.out.println("------------------");
for (Igal card : cards) {
System.out.println(card.toString());
}
System.out.print("the size is " + cards.size()+"\n");

temp.txt内容如下

Volare : To Fly
Velle : To Wish
Facere : To Do / Make
Trahere : To Spin / Drag
Odisse : To Hate

输出:

------------------
Volare To Fly
Velle To Wish
Facere To Do / Make
Trahere To Spin / Drag
Odisse To Hate
the size is 5

关于java - 文本文件转换为数组列表时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25193648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com