gpt4 book ai didi

java - 如何仅将 CSV 中的唯一值添加到 ComboBox 中?

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:08 25 4
gpt4 key购买 nike

我想读取 csv 文件并将单词“Jakarta”和“Bandung”放入组合框中。这是输入内容

id,from,
1,Jakarta
2,Jakarta
5,Jakarta
6,Jakarta
10,Bandung
11,Bandung
12,Bandung

我设法获取这些单词并将其放入组合框中,但正如您所看到的,文本文件本身包含很多单词“Jakarta”和“Bandung”,而我只想在组合框中显示这两个单词一次。

这是我的临时代码,目前可以使用,但效率低下,如果单词有更多变化,可能无法使用

public String location;

private void formWindowOpened(java.awt.event.WindowEvent evt) {

String csvFile = "C:\\Users\\USER\\Desktop\\Project Data.csv";
BufferedReader br = null;
LineNumberReader reader = null;
String line = "";
String cvsSplitBy = "-|\\,";

br = new BufferedReader(new FileReader(csvFile));
reader = new LineNumberReader(new FileReader(csvFile));


while ((line = br.readLine()) != null) {

// use comma as separator

String[] bookingdata = line.split(cvsSplitBy);

location = bookingdata[1];
ComboBoxModel model = cmb1.getModel();
int size = model.getSize();

cmb1.addItem(location);

for(int i = 1; i < size; i++){

if(model.getElementAt(i).equals("from")){
cmb1.removeItemAt(i);
}

else if(model.getElementAt(i).equals("Bandung")){
cmb1.removeItemAt(i);
}


for(int j = 2; j < i; j++){
if(model.getElementAt(j).equals("Jakarta")){
cmb1.removeItemAt(j);
}
}
}
}
}

其他人推荐了这种方法

boolean isEquals = false;
for(i = 0; i < a && !isEquals; i++){
isEquals = location.equals("Jakarta");
if(isEquals){
cmb1.addItem("Jakarta");
}
}

该代码不起作用。因为代码一旦添加“Jakarta ”就不会停止,但它会在完成循环后停止。因此它仍然在组合框中创建重复项。

我想知道是否还有其他代码可以尝试。谢谢

最佳答案

尝试先将所有单词放入一个集合中,然后将其添加到组合框中。设置本身将处理每个单词的精确出现一次。

类似这样的事情:

    while ((line = br.readLine()) != null) {

// use comma as separator

String[] bookingdata = line.split(cvsSplitBy);

location = bookingdata[1];
ComboBoxModel model = cmb1.getModel();
int size = model.getSize();
// add all location in set and set will only allow distinct values
locationSet.add(location);

}
// after looping through all location put it in combobox
for(String location:locationSet)cmb1.addItem(location);
}
}

正如评论中所讨论的,集合旨在保留唯一的值。下面是JShell的截图:

enter image description here

PS:这只是提供一个想法,可能需要根据要求进行一些修改。

--已编辑--

正如所讨论的,您似乎仍然缺少一些东西,我尝试编写下面的代码并且工作正常

package com.digital.core;

import java.util.HashSet;
import java.util.Set;

import javax.swing.JComboBox;
import javax.swing.JFrame;

public class Test {

public static void main(String[] args) {
JFrame jframe = new JFrame();
jframe.setSize(300, 300);
String data = "id,from,\n" +
"1,Jakarta\n" +
"2,Jakarta\n" +
"5,Jakarta\n" +
"6,Jakarta\n" +
"10,Bandung\n" +
"11,Bandung\n" +
"12,Bandung";
String[] dataArr = data.split("\n");

Set<String> locationSet = new HashSet<>();
for(String line:dataArr) {
locationSet.add(line.split(",")[1]);
}
JComboBox<String> comboBox = new JComboBox<>();
for(String location:locationSet)
comboBox.addItem(location);
jframe.add(comboBox);
jframe.setVisible(true);


}


}

enter image description here

关于java - 如何仅将 CSV 中的唯一值添加到 ComboBox 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50869353/

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