Разделить текстовый файл на основе заголовка - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть текстовый файл, который мне нужен, чтобы прочитать только цифры, а затем заполнить их массивом.

LOCATION
6     7
POINT
8     9
JOBS
1     4
4     9
11    8
9     6
5     2

Я знаю, как читать из файла, ниже мой код, но я просто не знаю, как читать ТОЛЬКО эти числа. Я не уверен, как правильно использовать метод split.

BufferedReader objReader = null;
   try {
      String strCurrentLine;

      objReader = new BufferedReader(new FileReader("D:\\Jobs.txt"));

   while ((strCurrentLine = objReader.readLine()) != null) {
    System.out.println(strCurrentLine); //test
   }

  } catch (IOException e) {

   e.printStackTrace();

  } 

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Когда дело доходит до интерпретации форматированных данных, я всегда хотел бы использовать регулярное выражение:

String line;
StringBuilder builder = new StringBuilder();
while ((line = objReader.readLine()) != null) {
    builder.append("\n" + line);
}

objReader.close();

List<Integer> numbers = new ArrayList<Integer>();
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(builder.toString());
while (m.find()) {
    numbers.add(Integer.parseInt(m.group()));
}

numbers.stream().forEach(System.out::println);

Если вы хотите, чтобы числа были сгруппированы по строке, попробуйте следующее:

String line;
List<List<Integer>> numbers = new ArrayList<List<Integer>>();
while ((line = objReader.readLine()) != null) {
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(line);

    List<Integer> nums = new ArrayList<Integer>();
    while (m.find()) {
        nums.add(Integer.parseInt(m.group()));
    }

    numbers.add(nums);
}

objReader.close();

numbers.stream().flatMap(List::stream).forEach(System.out::println);

Вывод:

6
7
8
9
1
4
4
9
11
8
9
6
5
2

Хотя я должен признать, что решение Scary Wombat намного короче и чище.

1 голос
/ 24 апреля 2020

Сначала вам нужно разделить, а затем проверить, является ли целое число

while ((strCurrentLine = objReader.readLine()) != null) {
    String words [] = strCurrentLine.split ("\\s+");
    for (String word : words) {
        try {
            Integer.valueOf (word);
            System.out.println(word); 
        } catch NumberFormatException e { // do nothing}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...