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