Java - чтение из текстового файла и добавление элемента (string, arrayList) в hashmap - PullRequest
0 голосов
/ 15 января 2020

Это текстовый файл: output1.txt

zzz ***Wed Jan 15 10:00:03 +08 2020
a : 20
b : 30
c : 40
zzz ***Wed Jan 15 11:00:03 +08 2020
a : 22
b : 24
c : 25

Я пытаюсь добавить дату в String и a, b, c как ArrayList в карту ha sh:

Желаемый вывод:

{zzz ***Wed Jan 15 10:00:03 +08 2020=[a : 20, b : 30, c : 40],
 zzz ***Wed Jan 15 11:00:03 +08 2020=[a : 22, b : 24, c : 25]}

Мой код:

    String dateString ="";
    ArrayList<String> value = new ArrayList<String>();
    HashMap<String, ArrayList> result = new HashMap<String, ArrayList>();

    String fileName = "/Users/--/Downloads/output1.txt";
    File file = new File(fileName);
    FileReader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);
    String line;

    while ((line = br.readLine()) != null) {
        if (line.startsWith("zzz")) {
            dateString = line;
        } else {
            value.add(line);
        }
        result.put(dateString, value);
    }
    System.out.println(result);

И результат, который я получил:

{zzz ***Wed Jan 15 10:00:03 +08 2020=[a : 20, b : 30, c : 40, a : 22, b : 24, c : 25], 
 zzz ***Wed Jan 15 11:00:03 +08 2020=[a : 20, b : 30, c : 40, a : 22, b

Ответы [ 2 ]

1 голос
/ 15 января 2020

Вот пример кода.

Мы используем Scanner для анализа каждой строки входной строки. Объект сканера определен в try-with-resources , который будет автоматически закрыт.

Мы определяем шаблон форматирования даты и времени с DateTimeFormatter, чтобы соответствовать вашему в стиле фанк вводу. Совет. Обучите издателя ваших данных стандарту ISO 8601 , определяющему практические форматы для обмена значениями даты и времени в виде текста.

В качестве нашего ключа мы анализируем первую из каждых четырех строк в получить объект OffsetDateTime. Это ключ в нашем Map. Наша карта определена конкретно как TreeMap, чтобы хранить ключи в отсортированном хронологическом порядке.

Мы строим List из Integer числа, проанализированные из ожидаемых значений "a, b, c". Мы используем новую функцию List.of для простого синтаксиса при создании объекта List неизвестного конкретного типа. List сохраняет элементы в том порядке, в котором они были добавлены, поэтому мы знаем, что первое - a, второе - b, а третье - c.

String s = "zzz ***Wed Jan 15 10:00:03 +08 2020\n" +
        "a : 20\n" +
        "b : 30\n" +
        "c : 40\n" +
        "zzz ***Wed Jan 15 11:00:03 +08 2020\n" +
        "a : 22\n" +
        "b : 24\n" +
        "c : 25";

DateTimeFormatter f = DateTimeFormatter.ofPattern( "'zzz ***'EEE MMM dd HH:mm:ss x uuuu" ).withLocale( Locale.US );
Map < OffsetDateTime, List < Integer > > momentCounts = new TreeMap <>();
try (
        Scanner scanner = new Scanner( s ) ;
)
{
    while ( scanner.hasNextLine() )
    {
        OffsetDateTime moment = OffsetDateTime.parse( scanner.nextLine() , f );
        List < Integer > counts = List.of(
                Integer.valueOf( scanner.nextLine().replace( "a : " , "" ) ) ,
                Integer.valueOf( scanner.nextLine().replace( "b : " , "" ) ) ,
                Integer.valueOf( scanner.nextLine().replace( "c : " , "" ) )
        );
        momentCounts.put( moment , counts );
    }
}

System.out.println( "momentCounts = " + momentCounts );

При запуске.

momentCounts = {2020-01-15T10: 00: 03 + 08: 00 = [20, 30, 40], 2020-01- 15T11: 00: 03 + 08: 00 = [22, 24, 25]}

0 голосов
/ 15 января 2020

Просто инициализируйте новый массив, прежде чем читать новую строку, начинающуюся с "zzz".

String fileName = "/Users/--/Downloads/output1.txt";
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;

while ((line = br.readLine()) != null) {
    if (line.startsWith("zzz")) {
        dateString = line;
        value = new ArrayList<>();
    } else {
        value.add(line);
    }
    result.put(dateString, value);
}
System.out.println(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...