java-如何仅将CSV中的唯一值添加到ComboBox?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何仅将CSV中的唯一值添加到ComboBox?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2898字,纯文字阅读大概需要5分钟。
内容图文
我想阅读一个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的屏幕截图:
PS:这只是一个想法,可能需要根据要求进行一些修改.
–EDITED–
正如讨论的那样,看来您仍然缺少某些内容,我尝试在下面的代码段中编写并正常工作
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);
}
}
内容总结
以上是互联网集市为您收集整理的java-如何仅将CSV中的唯一值添加到ComboBox?全部内容,希望文章能够帮你解决java-如何仅将CSV中的唯一值添加到ComboBox?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。