簡體   English   中英

讀取 CSV 文件並將其拆分為數組(Java)

[英]Reading CSV file and splitting it in an array(Java)

這是我當前的代碼:

public static String findPhoneNumber(Scanner input, String name) {
    String[] arr;
    while (input.hasNextLine()){
        arr = name.split(DELIMITER);
        input.nextLine();
        for (int i=0;i<=arr.length;i++) {
            if (arr[0].endsWith(name)) {
                return (arr[3]);
            }
            else {
                return("Nothing to return");
            }
        }
    }
    CSV.testFindPhoneNumber(arr[3]);
}


package com.company;

import java.io.IOException;
import java.net.URL;
import java.util.Scanner;

public class CSV {
public static final String CSV_FILE_URL = "https://orb.essex.ac.uk/ce/ce152/data/staff.csv";

public static void main(String[] args) throws IOException {
    URL url = new URL(CSV_FILE_URL);
    Scanner input = new Scanner(url.openConnection().getInputStream());
    testFindPhoneNumber(input);
}

public static void testFindPhoneNumber(Scanner input){
    System.out.println("### Testing findPhoneNumber");
    for (String name : new String[]{"Kruschwitz", "Vickers", "Voelker"}){
        String result = TestCSV.findPhoneNumber(input,name);
        System.out.println("name= " + name + ", result= " + result);
    }
  }
}

我正在嘗試將 excel 文件(我的代碼中的 URL)拆分為一個 3 元素數組,然后找到寫在公共類 CSV 中的名稱以打印這些名稱對應的電話號碼。

不知道具體怎么做。 任何意見,將不勝感激。

您的代碼有很多問題。 讓我們快速回顧一下最重要的事情:

public static String findPhoneNumber(Scanner input, String name) {
String[] arr;

不好命名。 arr應該做什么? 給它一個名字,告訴它應該是什么意思。

while (input.hasNextLine()){
    arr = name.split(DELIMITER);

你為什么要分 名稱是進入您的方法的固定參數?!

    input.nextLine();

您正在閱讀一行……但沒有存儲該結果。 換句話說:您閱讀了整個輸入,但不處理其中任何一個。

可能你的意思是String line = input.nextLine() ; 之后您的方法會希望在來自 URL 文件的那一line上工作。

    for (int i=0;i<=arr.length;i++) {
        if (arr[0].endsWith(name)) {
            return (arr[3]);
        }
        else {
            return("Nothing to return");
        }
    }

我不知道你想通過這種比較達到什么目的。 然后:永遠不要返回一些“消息”來指示錯誤(對於返回字符串的方法)。 該方法的調用者應該如何理解出了問題?

所以:不是返回消息,而是拋出異常或返回 null。

最后:你完全讓自己負擔過重。 不要嘗試從遠程 URL 讀取 CSV,在一步中拆分和處理所有輸入。 相反:首先編寫僅讀取該 URL 並可能打印數據的代碼。 然后,當它運行良好時,編寫單獨的代碼來執行您想要對純字符串輸入進行的“匹配”。 最后,把這些東西放在一起。

但是,再次:一個簡單的split(",")任意CSV數據的工作。 CSV要復雜得多。 不要試圖重新發明輪子; 尤其是當您處於這樣的初學者水平時。

您的主要課程,即CSV對我來說看起來不錯。 問題在於在主類中調用的findPhoneNumber方法。 下面是它的修正版本。

    public static String findPhoneNumber(Scanner input, String name){
        String[] arr;
        String phoneNum = null;
        while (input.hasNextLine()){
            arr = input.nextLine().split(",");
            if (arr[0].endsWith(name)) {
                phoneNum = arr[2];
                break;
            }
        }
        return phoneNum;
    }

這是輸出。

測試 findPhoneNumber

名稱=克魯什維茨,結果= 5A.542

名稱=維氏,結果= 5A.528

名稱= Voelker,結果= null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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