- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我能够读取我的数据集(csv文件),但是当我运行我的主类时,它显示所有行,包括具有空值的行。有没有办法忽略数据集中带有缺失值(即空值)的每一行?我正在考虑在方法 testNullValue() 中检查这一点,但我真的不知道要检查什么。
我的类(class)
public static BufferedReader exTractTraningData(File datafile, String ListOfCharacteristics) throws IOException {
try {
//create BufferedReader to read csv file
BufferedReader reader = new BufferedReader(new FileReader(datafile));
String strLine = "";
StringTokenizer st = null;
int lineNumber = 0, tokenNumber = 0;;
while ((strLine = reader.readLine()) != null) {
lineNumber++;
//break comma separated line using ","
st = new StringTokenizer(strLine, ",");
while (st.hasMoreTokens()) {
//display csv values
tokenNumber++;
System.out.println("Line # " + lineNumber
+ ", Token : " + st.nextToken(",") );
}
//reset token number
tokenNumber = 0;;
}
} catch (Exception e) {
System.out.println("Exception while reading csv file: " + e);
}
return null;
}
public boolean testNullValue(String ListOfCharacteristics, String ListOfValues){
return false;
}
最后,我不明白为什么我的控制台中的结果没有显示像“name”、“2”、“TV”、“As”、“40”、“10”这样的每一行,而我在这里指定它 st = new StringTokenizer(strLine, ",");
最佳答案
StringTokenizer遇到空值时会忽略空值,并且实际上无法知道它们实际上存在于 CSV 分隔字符串行中,除非标记生成器还提供分隔符作为标记,并且当有两个分隔符标记时,一个接一个,然后是一个空值显然遇到过:
st = new StringTokenizer(strLine, ",", true);
这是一种在 CSV 文件数据行中检测 null 的真正booger方法,因为现在您必须提供代码来计算两个分隔符标记相继落下的情况,然后完全忽略分隔符标记。这很可能就是为什么没有太多人使用 StringTokenizer 来解析 CSV 文件并且更喜欢使用类似 String#split() 的原因之一。方法,或者更好的是 CSV 解析器 API,如 OpenCSV 。这当然取决于真正需要做什么以及它的范围有多大。
实际上不鼓励在新代码中使用旧的遗留 StringTokenizer 类,因为它的方法不区分标识符、数字和带引号的字符串。类方法甚至无法识别并跳过注释。
无论如何,如果您想要检查任何单个 CSV 行中的任何空值,则无需重新读取该文件。它可以在您当前正在执行的同一单遍读取中完成。这个概念非常简单,利用一种代码机制来读取 CSV 文件数据行,将其分割为 token , token 还维护任何给定行中可能包含的空值,然后进行比较 token 计数与使用 StringTokenizer 计数解析的数据文件行完全相同。这种事情可以在 CSV 数据行标记化后直接完成,例如:
while ((strLine = reader.readLine()) != null) {
// You might want to count lines only if they are valid!
// If so then move this line below the IF statement code
// block.
lineNumber++;
//break comma separated line using ","
st = new StringTokenizer(strLine, ",");
// Is this a blank line OR Is there possibly a null token
// in the data line detected by the String#split() method?
if (st.countTokens() == 0 || (st.countTokens() != strLine.split(",").length)) {
System.out.println("The data line is blank OR there is a null value "
+ "in the data line!");
// Skip this data line from further processing
// within the WHILE loop.
continue;
}
while (st.hasMoreTokens()) {
//display csv values
tokenNumber++;
System.out.println("Line # " + lineNumber
+ ", Token : " + st.nextToken(",") );
}
//reset token number
tokenNumber = 0;
}
我个人只会使用 String#split() 方法,而不是完全使用 StringTokenizer 类,也许像这样:
while ((strLine = reader.readLine()) != null) {
// You might want to count lines only if they are valid!
// If so then move this line below the IF statement code
// block.
lineNumber++;
// Split comma separated line using ","
String[] st = strLine.split(",");
if (st.length == 0 || Arrays.asList(st).contains("")) {
System.out.println("The data line (" + lineNumber + ") is blank OR "
+ "there is a null value in the data line!");
// Skip this data line from further processing
// within the WHILE loop.
continue;
}
StringBuilder sb = new StringBuilder();
sb.append("Line# ").append(lineNumber).append(": ");
for (int i = 0; i < st.length; i++) {
sb.append("Token : ").append(st[i]).
// Ternary Operator used here to add commas
append(i < (st.length-1) ? ", " : "");
}
System.out.println(sb.toString());
}
当然,这一切都假设 CSV 文件数据以逗号分隔,任何分隔符之前或之后都没有空格。当人们发布有关数据文件处理的问题并且没有提供数据在该文件中如何格式化的示例时,这就是问题所在。当然,现在我要解决你的第二个问题,即为什么事情没有按照你想要的方式显示:
And Lastly, I don't why the results in my console is not displaying each rows like this "name", "2 ", "TV ", "As ", " 40", "10"
如果没有示例,谁知道数据如何在文件中呈现以及确切您希望如何在屏幕上呈现。这个例子到底是什么意思,我个人不太明白。此外,不应该是“name”,“gender”,“2”...?
我们当然可以猜测,我的猜测是您的分隔符在StringTokenizer<中使用/strong> 方法是错误的,当然,上面的所有示例都是基于您在自己的代码中提供的分隔符。
关于java - 在 Java 中忽略读取 CSV 文件的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569629/
我已经为使用 JGroups 编写了简单的测试。有两个像这样的简单应用程序 import org.jgroups.*; import org.jgroups.conf.ConfiguratorFact
我有一个通过 ajax 检索的 json 编码数据集。我尝试检索的一些数据点将返回 null 或空。 但是,我不希望将那些 null 或空值显示给最终用户,或传递给其他函数。 我现在正在做的是检查
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why does one often see “null != variable” instead of “
嗨在我们公司,他们遵循与空值进行比较的严格规则。当我编码 if(variable!=null) 在代码审查中,我收到了对此的评论,将其更改为 if(null!=variable)。上面的代码对性能有影
我正在尝试使用 native Cordova QR 扫描仪插件编译项目,但是我不断收到此错误。据我了解,这是代码编写方式的问题,它向构造函数发送了错误的值,或者根本就没有找到构造函数。那么我该如何解决
我在装有 Java 1.8 的 Windows 10 上使用 Apache Nutch 1.14。我已按照 https://wiki.apache.org/nutch/NutchTutorial 中提
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: what is “=null” and “ IS NULL” Is there any difference bet
Three-EyedRaven 内网渗透初期,我们都希望可以豪无遗漏的尽最大可能打开目标内网攻击面,故,设计该工具的初衷是解决某些工具内网探测速率慢、运行卡死、服务爆破误报率高以及socks流
我想在Scala中像在Java中那样做: public void recv(String from) { recv(from, null); } public void recv(String
我正在尝试从一组图像补丁中创建一个密码本。我已将图像(Caltech 101)分成20 X 20图像块。我想为每个补丁创建一个SIFT描述符。但是对于某些图像补丁,它不返回任何描述符/关键点。我尝试使
我在验证器类中自动连接的两个服务有问题。这些服务工作正常,因为在我的 Controller 中是自动连接的。我有一个 applicationContext.xml 文件和 MyApp-servlet.
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭10 年前。 问题必须表现出对要解决的问题的最低程度的了解。告诉我们您尝试过做什么,为什么不起作用,以
大家好,我正在对数据库进行正常的选择,但是 mysql_num_rowsis 为空,我不知道为什么,我有 7 行选择。 如果您发现问题,请告诉我。 真的谢谢。 代码如下: function get_b
我想以以下格式创建一个字符串:id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&等,在for循环中,我得到
我正在尝试使用以下代码将URL转换为字符串: NSURL *urlOfOpenedFile = _service.myURLRequest.URL; NSString *fileThatWasOpen
我正在尝试将NSNumber传递到正在工作的UInt32中。然后,我试图将UInt32填充到NSData对象中。但是,这在这里变得有些时髦... 当我尝试将NSData对象中的内容写成它返回的字符串(
我正在进行身份验证并收到空 cookie。我想存储这个 cookie,但服务器没有返回给我 cookie。但响应代码是 200 ok。 httpConn.setRequestProperty(
我认为 Button bTutorial1 = (Button) findViewById(R.layout.tutorial1); bTutorial1.setOnClickListener
我的 Controller 中有这样的东西: model.attribute("hiringManagerMap",hiringManagerMap); 我正在访问此 hiringManagerMap
我想知道如何以正确的方式清空列表。在 div 中有一个列表然后清空 div 或列表更好吗? 我知道这是一个蹩脚的问题,但请帮助我理解这个 empty() 函数:) 案例)如果我运行这个脚本会发生什么:
我是一名优秀的程序员,十分优秀!