[英]Parsing data in Java while checking data types
我主要使用 Python 编写代码,而且我对 Java 完全陌生,因此我在使用 Java 进行有关解析 .csv 文件的简单编程任务时遇到了困难。 我的 .csv 文件有多个列,我想解析每一行并将第二列存储为字符串,将最后一列(第 4 列)存储为双精度(字符串,双精度)对。 但是,如果第四列不包含可以转换为双精度值的值,我想分配一个 0.0 作为该行的双精度值。 .csv 中的每一行都传递给下面的这个函数,我尝试存储提到的 (string, double) 对,但在执行后,所有对的双精度值都是 0.0。 我不确定我的 try/catch 或每个令牌的循环方法是否存在问题。 任何提示表示赞赏。
public void a(Text t) {
StringTokenizer word = new StringTokenizer(t.toString(), ", ");
int count = 0;
double val = 0.0;
String keep = new String("");
boolean loop = true;
while (loop) {
String nextWord = word.nextToken ();
if (count == 2) {
//string in pair
keep = nextWord;
//loop until at last column and store word
while (word.hasMoreTokens()){
nextWord = word.nextToken();
}
loop = false;
//check if string can be cast to double
try{
Double.parseDouble(nextWord);
} catch(NumberFormatException e) {
val = 0.0;
} catch(NullPointerException e) {
val = 0.0;
}
val = Double.parseDouble(nextWord);
}
count++;
}
// then not relevant code to store (keep, val) pair for rest of code
}
您应该避免使用StringTokenizer
因为它是一个已弃用的库。 使用string.split()
。 这是一个更简单的解决方案
public void a(Text t) {
String[] line = t.toString().split(", ");
//check if string can be cast to double
try{
Double.parseDouble(line[3]);
} catch(NumberFormatException e) {
line[3] = "0.0";
}
}
如果第 4 列可以转换为双倍,它将保持原样,否则将其设为“0.0”。 需要注意的是,由于 java 字符串中只能有一种数据类型,因此您不能将其存储为双精度值,但是,无论何时您想使用此值,您都可以当场解析它,而不必担心它会引发异常”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.