2015-08-26 3 views
0

Пожалуйста, помогите мне с этой проблемой. Я пытаюсь решить, я застрял на ней в течение нескольких часов.Сплит-файл в массив

Задача: Для чтения данных из текстового файла. Структура файла данных:

  • он будет иметь несколько наборов данных
  • наборы данных разделены пустой строкой
  • Каждый набор данных содержит определенное количество положительных целых чисел

Задача: Я хочу написать программу Java для чтения файла данных, предоставленного пользователем, и сохранить каждый набор данных в отдельном массиве. Я также хочу отображать размер каждого массива в качестве вывода, за которым следует отображение соответствующего набора данных в отсортированном порядке (увеличение порядка чисел). Я хочу использовать метод Arrays.sort(int[ ]) для сортировки каждого массива. Я уже прочитал файл.

Любая помощь будет принята с благодарностью! Я не думаю, что я пишу метод, чтобы поместить их в массив и правильно подсчитать количество элементов.

Ниже приведен код для обработки этого файла.

while(inFile.hasNext()){ 
     String line = inFile.nextLine(); 
     String[] lineArray = line.split("\\s+"); 
     list.add(line); 
     Arrays.sort(lineArray); 
     System.out.println("Total number of elements in array : " + lineArray.length); 
     String a = Arrays.toString(lineArray); 
     System.out.println(a.substring(1, a.length() - 1)); 
+0

Подсказка: в 'Arrays.sort (звуковая колонка);' вы сортировкой строки, вы, вероятно, хотите что-то еще ... – alfasin

+0

массив строк должен быть преобразован в целочисленный массив inorder для использования Arrays.sort() – hermit

ответ

0

Вы могли бы начать чтение всего файла в List с Files.readAllLines(Path). Затем вам необходимо преобразовать String[] lineArray в int[]. Integer.parseInt(String) для преобразования String в int. Это может выглядеть как-то

public static void main(String[] args) throws IOException { 
    String home = System.getProperty("user.home"); 
    Path filePath = Paths.get(home, "file.txt"); 
    List<String> lines = Files.readAllLines(filePath); 
    for (String line : lines) { 
     String[] lineArray = line.split("\\s+"); 
     System.out.println("Total number of elements in array : " 
       + lineArray.length); 
     int[] arr = new int[lineArray.length]; 
     for (int i = 0; i < lineArray.length; i++) { 
      arr[i] = Integer.parseInt(lineArray[i]); 
     } 
     Arrays.sort(arr); 
     String a = Arrays.toString(arr); 
     System.out.println(a.substring(1, a.length() - 1)); 
    } 
} 
0

В Java8, вы можете использовать поток, чтобы упростить код:

public static void main(String[] args) throws IOException { 
    Files.lines(Paths.get("./myinputFile.txt")) 
      .map(l -> Arrays.stream(l.split("\\s+")).map(Integer::parseInt)) 
      .map(Stream::sorted) 
      .forEach(t -> { 
       t.forEach(v -> System.out.print(v + " ")); 
       System.out.println(); 
      }); 
}