如何将数据从CSV读取到集合中
我的任务是创建一个名为禁忌的游戏。它由一个主要词和3个被禁止的词组成。游戏的目的是要在屏幕上显示单词,然后用户必须描述主要单词而不使用单词本身或禁用的单词。如何将数据从CSV读取到集合中
到目前为止,我已经能够读取已存储在CSV中的数据,并使其能够在我选择输出BannedWords时这样做。现在的问题是,当它输出MainWord或BannedWord1等时,它会输出CSV中每个记录的数据。
下面是我的CSV数据(这只是一个有少量记录的测试,所以当它工作时,我可以介绍其余的)。
树,棕色,绿色,自然
湖,蓝色,水,湿
苹果,绿色,水果,健康
如果我选择了输出MainWord,这是第一个字,它输出这样的:
树
湖
苹果
我需要以某种方式存储从CSV 单独集合中读取的数据,这样,当我需要使用他们,他们正确输出,他们在这样一种方式我可以稍后在GUI JLabel中显示它们。
注意到我使用的是NetBeans,所以我也可以使用任何内置函数,这可能也很有用。
public class Card
{
private String sMainWord;
private String sBannedWord1;
private String sBannedWord2;
private String sBannedWord3;
public Card(String sMW, String sBW1, String sBW2,String sBW3)
{
sMainWord = sMW;
sBannedWord1 = sBW1;
sBannedWord2 = sBW2;
sBannedWord3 = sBW3;
}
public void setsMainWord(String sMW)
{
sMainWord = sMW;
}
public String getsMainWord()
{
return sMainWord;
}
public void setsBannedWord1(String sBW1)
{
sBannedWord1 = sBW1;
}
public String getsBannedWord1()
{
return sBannedWord1;
}
public void setsBannedWord2(String sBW2)
{
sBannedWord2 = sBW2;
}
public String getsBannedWord2()
{
return sBannedWord2;
}
public void setsBannedWord3(String sBW3)
{
sBannedWord3 = sBW3;
}
public String getsBannedWord3()
{
return sBannedWord3;
}
public static void main(String[] args) throws FileNotFoundException
{
String fileNameDefined = "/Users/student/NetBeansProjects/TabooGameComplete/CSData.csv";
File file = new File(fileNameDefined);
try
{
Scanner inputStream = new Scanner(file);
while(inputStream.hasNext() != false)
{
String TabooCardWords = inputStream.nextLine();
String[] information = TabooCardWords.split(",");
String MainWord = information[0];
String BannedWord1 = information[1];
String BannedWord2 = information[2];
String BannedWord3 = information[3];
Card TBC = new Card (MainWord, BannedWord1, BannedWord2, BannedWord3);
System.out.println("*" + BannedWord1 + "*");
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
您正在执行中产生的Card
太创建一个卡,每次,你输出其BannedWord1
循环中的输出语句。当你们一个接一个地创造它们时,它们会一个接一个地输出。
即
//For each line in file
while(inputStream.hasNext() != false)
{
//Create Card
//Output BannedWord1 used to create Card
}
如果你想输出的一个Card
一个元素,你需要让你创建外循环使用的Card
对象: -
Card[] cards = new Cards[3];
int i=0;
//For each line in file
while(inputStream.hasNext() != false)
{
//Create Card
cards[i++] = newlyCreatedCardObject; //Store card object for later
//Output BannedWord1 used to create Card
}
//Output BannedWord1 from the Card created from the second line
System.out.println(cards[1].getsBannedWord1());
附加Point
按照惯例,java变量以小写字母和类开头es使用大写字母,因此可能会造成混淆
String TabooCardWords; //Should really be 'tabooCardWords'
...
String MainWord = information[0]; //-> 'mainWord'
String BannedWord1 = information[1]; //-> 'bannedWord1'
String BannedWord2 = information[2]; //-> 'bannedWord2'
String BannedWord3 = information[3]; //-> 'bannedWord3'
非常感谢,非常有用,非常快。再次感谢 – xHecticAtomic
Upvote并接受,如果它解决您的问题,请 –
您应该使用Commons CSV来处理您的CSV需求。它很容易使用,并会让你的生活变得更简单。 – DejaVuSansMono
我猜这是一个低水平的课程问题,这意味着标准/外部图书馆不倾向于被允许。 –