[英]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.