разбирать текстовый файл с разделителями |оператор и сохранить название столбца заголовка - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть текстовый файл, в котором поля разделены |оператор.Первая строка в текстовом файле содержит столбец Names.Я могу разобрать и разделить поля на основе |оператор, использующий сканер, но мне нужно имя столбца заголовка для каждого значения поля

Пожалуйста, найдите мой пример содержимого текстового файла, который необходимо проанализировать ниже: FirstName || lastName || Возраст || Зарплата

Конг || Кинг || 20 || $ 1000

Стив || Роджерс |||| $ 2000

Марк || Ричер || 30 || $ 12000

Спенсер || Повар || 31 || $ 700


Результат, который я получаю сейчас:

Имя

Фамилия

Возраст

Зарплата

Конг

Король

20

$ 1000

Стив

Роджерс

$ 2000

Марк

Богатство

30

$ 12000

Спенсер

Повар

31

$ 700


образец кода, который я использовал:

    FileInputStream inputStream = new FileInputStream("c:\\sample\\sample.txt");
    Scanner scanner = new Scanner(inputStream, "UTF-8");
    scanner.useDelimiter("[\\||]");
    while(scanner.hasNext()){
        System.out.println(scanner.next().trim());

    }
    scanner.close();
    }

Результат, который мне нужен, показан ниже:

FirstName -> Kong

lastName -> King

Age -> 20

Заработная плата -> 1000 долларов США


Имя -> Стив

фамилия -> Роджерс

Возраст ->

Зарплата -> 2000 долларов

Любая помощь приветствуется ..

1 Ответ

0 голосов
/ 06 апреля 2019

Не знаю, является ли это наиболее эффективным решением, но справился с этим, надеюсь, это поможет!:) Путь к файлу другой, потому что я в Linux.

FileInputStream inputStream = new FileInputStream("/home/dzandes/Music/test.txt");
Scanner scanner = new Scanner(inputStream, "UTF-8");
scanner.useDelimiter("[\\||]");

List<String> contents = new ArrayList<>();

while (scanner.hasNext()) {

     String s = scanner.next().trim();

     // First, we split the Strings with new line in between
     if (!s.isEmpty()) {
          if (s.contains("\n")) {
              String[] s_ = s.split("\n");
              for (String str : s_) {
                   contents.add(str);
               }
           } else {
               contents.add(s);
           }       
      } else {
           contents.add(s);
      }
 }
 scanner.close();

 // Then we keep the necessary empty Strings we need, e.g. Steve Roger's age, and skip the rest
 List<String> contents_ = new ArrayList<>();
 for (int j = 0; j < contents.size(); j++) {
      if (!contents.get(j).isEmpty()) {
           contents_.add(contents.get(j));
      } else {
           if (contents.get(j+1).isEmpty() 
                  && contents.get(j-1).isEmpty()) {
               contents_.add(contents.get(j));
            }
       }
  }

  /**
   * Just left this for-loop to see what the list contains after the above
   * 
   * Of course, you can comment it
   */
   for (String s : contents_) {
       System.out.println("s :" + s);
   }

   int i = 1;
   while (i*4 < contents_.size()) {
        System.out.println(contents_.get(0) + " - " + contents_.get(i*4));
        System.out.println(contents_.get(1) + " - " + contents_.get((i*4) + 1));
        System.out.println(contents_.get(2) + " - " + contents_.get((i*4) + 2));
        System.out.println(contents_.get(3) + " - " + contents_.get((i*4) + 3));
        i++;
    }

Он печатает,

FirstName - Kong
lastName - King
Age - 20
Salary - $1000
FirstName - Steve
lastName - Rogers
Age - 
Salary - $2000
FirstName - Mark
lastName - Richer
Age - 30
Salary - $12000
FirstName - Spencer
lastName - Cook
Age - 31
Salary - $700
...