亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 Java 中以逗號和標題分隔的文件中的讀取時間

從 Java 中以逗號和標題分隔的文件中的讀取時間

收到一只叮咚 2021-12-01 19:10:17
我有一個列表,文件中有很多次。我的目標是將所有時間都放在他們自己的名為time1,time2和的字符串數組中time3。該文件如下所示:time1, 5:01,3:21,4:05,1:52 time2, 2:11,6:35,2:00,5:00 time3, 12:09, 11:35, 9:02我嘗試將我讀入的每一行拆分,然后將其轉換為用逗號分隔的記號。但是,目前這似乎不是一個有效的解決方案,因為第一個元素總是以空格開頭,而最后一個元素沒有逗號。我想知道是否有人知道解決此問題的方法。這是我到目前為止想出的代碼:public void read_file(){try{    times = new Scanner(new File("times.csv"));    read_file();}catch(Exception e){    System.out.printf("Could not find file\n");}                }public void read_file(){while(times.hasNextLine()){    i++;    String a = times.nextLine();    String time[] = a.split(",");    //would only add first 4 elements    if(i < 4){        timeList1.add(time[i])    }}}這里的問題是我不知道如何檢查有多少元素我必須繼續,因為列表中的次數是不可預測的。唯一保持不變的是,總會有 3 個時間列表,稱為time1,time2和time3。
查看完整描述

3 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

這是另一種更簡單的方法:


public class ReadTimes {

    private Map<String, List<String>> timeLists = new HashMap();

    public void read_file() {

        try {

            Scanner times = new Scanner(new File("times.csv"));

            read_file(times);

        } catch (Exception e) {

            System.out.printf("Could not find file\n");

        }

    }

    public void read_file(Scanner times) {

        String label=null;

        while (times.hasNextLine()) {

            String time[] = times.nextLine().trim().split("[, ]+");

            for (String timeString : time) {

                if (timeString.startsWith("time")) {

                    label = timeString;

                    timeLists.put(label, new ArrayList());

                } else if (label != null) {

                    timeLists.get(label).add(timeString);

                }

            }

        }

        // dump the map of arraylists for demonstration purposes...

        for (Entry<String,List<String>> timeEntry : timeLists.entrySet()) {

            System.out.println(timeEntry);

        }

    }


    public static void main(String[] args) {

        ReadTimes rt = new ReadTimes();

        rt.read_file();

    }

}

鑒于您的問題中顯示的輸入數據,將產生以下輸出:


time1=[5:01, 3:21, 4:05, 1:52]

time2=[2:11, 6:35, 2:00, 5:00]

time3=[12:09, 11:35, 9:02]


查看完整回答
反對 回復 2021-12-01
?
米脂

TA貢獻1836條經驗 獲得超3個贊

由于您確定您只需要 3 個字符串數組,因此下面的代碼使用“時間”作為分隔符拆分初始字符串,在開頭刪除"1, ", "2, ","3, "在,結尾處進行修剪和刪除,最后在刪除所有空格后將每個項目拆分為, 作為產生 3 個字符串數組的分隔符。


    String times = "time1, 5:01,3:21,4:05,1:52, time2, 2:11,6:35,2:00,5:00, time3, 12:09,11:35, 9:02";


    String[] splitted = times.split("time");


    // exclude 0th item which is ""

    for (int i = 1; i < splitted.length; i++) {

        splitted[i] = splitted[i].trim();


        int index = splitted[i].indexOf(" ");


        if (splitted[i].endsWith(","))

            splitted[i] = splitted[i].substring(index + 1, splitted[i].length() - 1);

        else

            splitted[i] = splitted[i].substring(index + 1);


        splitted[i] = splitted[i].replaceAll(" ", "");

    }


    try {  // just in case

        String time1[] = splitted[1].split(",");

        System.out.println(Arrays.toString(time1));

        String time2[] = splitted[2].split(",");

        System.out.println(Arrays.toString(time2));

        String time3[] = splitted[3].split(",");

        System.out.println(Arrays.toString(time3));

    } catch (Exception e) {

        e.printStackTrace();

    }

打印 3 個字符串數組:


[5:01, 3:21, 4:05, 1:52]

[2:11, 6:35, 2:00, 5:00]

[12:09, 11:35, 9:02]


查看完整回答
反對 回復 2021-12-01
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

這是一個單元測試,它可以滿足您的需求。我不得不稍微格式化您的輸入字符串。您應該能夠以最少的更改為您完成這項工作。


import org.junit.Test;


import java.time.LocalDate;

import java.time.LocalTime;

import java.time.format.DateTimeFormatter;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;


/**

 * @author Dr. Parameter

 */

public class TimeParser {


    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("k:mm");


    @Test

    public void test(){


        // Test input

        String times = "time1, 5:01,3:21,4:05,1:52, time2, 2:11,6:35,2:00,5:00, time3, 12:09,11:35, 9:02";


        // Set up Objects used to collect

        String currentKey = "";

        HashMap<String, List<LocalTime>> timeMap = new HashMap();


        // Iterate though list

        String[] lineBreaks = times.split("\n");

        for(String line : lineBreaks){

            String[] csvBreaks = line.split(",");

            for(String csv : csvBreaks){


                //try to parse a time and add it to the key set, add a new key if there is a failure

                try {

                    timeMap.get(currentKey).add(LocalTime.parse(csv.trim(), formatter));

                } catch (Exception ex){

                    currentKey = csv;

                    timeMap.put(currentKey, new ArrayList<>());

                }

            }

        }


        //Print result:

        for(Map.Entry<String, List<LocalTime>> entry : timeMap.entrySet()){

            System.out.println("times for key: " + entry.getKey());

            for(LocalTime time : entry.getValue()){

                System.out.println("\t" + time);

            }

        }

    }

}


查看完整回答
反對 回復 2021-12-01
  • 3 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號