簡體   English   中英

在檢查數據類型的同時解析 Java 中的數據

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM