假设我在.csv文件中有一个数据如下:
| Number | Data_1 | Data_2 |
1 Yes No
2 No Yes
3 Yes Yes
我的问题是如何实现一个函数来检查Number是否包含Data 1和Data 2的数据。
到目前为止我所拥有的:
List<Data> csvList = new ArrayList<Data>();
String number = null;
String data_1 = null;
String data_2 = null;
if(!csvList.isEmpty() && csvList.size() > 0){
number = csvList.get(0);
data_1 = csvList.get(1);
data_2 = csvList.get(2);
//..... Now what can we do now from here?
}
修改时间:上午10:38
解决
由于
答案 0 :(得分:0)
您可以这样做:
List<Data> hasBothData = new ArrayList<Data>();
for(Data data:csvList){
if(data.hasData1() && hasData2()) { // how ever you check for data validity.
hasBothData.add(data);
}
}
您的hasBothData
应该包含两个数据的所有元素。
答案 1 :(得分:0)
您应该首先逐行阅读文件。 (我假设你还没有做到这一点:你的代码中没有任何迹象。)
最简单的方法是,如果您的数据就像您提供的那样简单,那就是阅读一行,然后使用String.split(",")
分割逗号,或者{{1}将分隔符设置为逗号。如果您拥有更复杂的数据,那么您可以使用CSV parser,但如果您的数据非常简单且可预测并且您不需要处理引号,那么它似乎有点过头了上。
完成上述操作后,您可以使用所读取的值,并检查它们是否应该如此(使用Scanner
等)。
但如果您需要更多帮助,则需要解释更多。
答案 2 :(得分:0)
创建表示数据的对象(请注意我将名称从数据更改为CSV):
class CSV {
public CSV(String number, String data1, String data2){
this.number = number;
this.data1 = data1;
this.data2 = data2;
}
String number;
String data1;
String data2;
public String getNumber(){
return this.number;
}
public boolean hasData(){
if ( ( data1.equals("Yes" == true ) && (data2.equals("No" == true) )
return true;
return false;
}
}
然后将数据从csv导入到它(ommited file operations):
List<Data> csvList = new ArrayList<CSV>();
使用数字创建结果列表。 List numbers = new ArrayList();
然后迭代所有实体。
for(CSV data:csvList){
if ( data.hasData() )
numbers.add(data.getNumber());
}
如果数据不明确是或否,那么您必须知道域名,因此在编译之前必须知道所有答案,并使用解决方案。 在紧要关头,您可以将答案分组并添加方法来猜测它是什么类型的数据:
public boolean belongTo(String column) {
if ( column.contains("Yes") == true )
return true;
if ( column.contains("yes") == true )
return true;
if ( column.contains("Ja") == true )
return true;
return false;
}
您对data2执行相同的操作。 以下是如何更改Data类: 而不是
if ( ( data1.equals("Yes" == true ) && (data2.equals("No" == true) )
把:
if ( ( this.belongsTo(data1) == true ) && (this.belongsTo(data2) == true) )
最后我们有CSV类:
class CSV {
public CSV(String number, String data1, String data2){
this.number = number;
this.data1 = data1;
this.data2 = data2;
}
String number;
String data1;
String data2;
public String getNumber(){
return this.number;
}
public boolean hasData(){
if ( ( data1.equals("Yes" == true ) && (data2.equals("No" == true) )
return true;
return false;
}
public boolean belongsTo(String column) {
if ( column.contains("Yes") == true )
return true;
if ( column.contains("yes") == true )
return true;
if ( column.contains("Ja") == true )
return true;
/* insert here your "Yes" equivalents */
return false;
}
}