Можно ли вывести массив без лишних пробелов? - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь взять текст файла .txt и перенести его информацию в массив, проблема в том, что я получаю вывод со словами, но вывод слишком разнесен. (массив должен быть 6 * 7) В файле есть текст: «В апреле был ясный холодный день, а часы били тринадцать».

import java.io.FileNotFoundException;
import java.util.*;

public class tryThings {


    public static void main(String[] args) throws FileNotFoundException {
        java.io.File file = new java.io.File("2DArray.txt");

        Scanner input = new Scanner(file);
        int totalRow = 6;
        int totalColumn = 7;
        char[][] myArray = new char[totalRow][totalColumn];
        file = new java.io.File("2DArray.txt");
        Scanner scanner = new Scanner(file);

        for (int row = 0; scanner.hasNextLine() && row < totalRow; row++) {
            char[] chars = scanner.nextLine().toCharArray();
            for (int i = 0; i < totalColumn && i < chars.length; i++) {
                myArray[row][i] = chars[i];
           System.out.println(Arrays.toString(chars));

            }
        }
    }
}               

Мне нужно, чтобы результат был в одном6 * 7 пробел (с каждым пробелом, заполненным или символом или пробелом, который в этом является "*"). Прямо сейчас программа выводит всю строку 7 раз, она должна печатать только один раз в формате 6 * 7. Это нормально, если слова пересекаются со следующей строкой и если все слова не помещаются в массив. Вот и пример того, как я хочу, чтобы вывод выглядел: [I, t,, w, a, s,] [a,, b, r, i, g, h] [t,, c, o, l, d,] [d, a, y,, i, n,] [A, p, r, i, l, ,,] [a, n, d,, t, h, e].

1 Ответ

0 голосов
/ 07 ноября 2019

Упомянутый код выдаст вам ожидаемый результат

import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;

public class Sample {

  public static void main(String[] args) throws FileNotFoundException {
    java.io.File file = new java.io.File("2DArray.txt");

    int totalRow = 6;
    int totalColumn = 7;
    char[][] myArray = new char[totalRow][totalColumn];
    Scanner scanner = new Scanner(file);
    file = new java.io.File("2DArray.txt");
    int rowIndex = 0;


    while (scanner.hasNextLine()) {
      // Read line from file and convert to array
      char[] chars = scanner.nextLine().toCharArray();

      for (int charIndex = 0; rowIndex < totalRow && charIndex < chars.length; rowIndex++, charIndex =
          charIndex + totalColumn) {
        // Copy the X=totalColumn chars from the above array to row
        System.arraycopy(chars, charIndex, myArray[rowIndex], 0,
            Math.min(totalColumn, chars.length - charIndex));
      }
    }

    for (char[] ar : myArray) {
      System.out.println(Arrays.toString(ar));
    }
    scanner.close();
  }
}

Есть одна вещь, о которой нужно позаботиться - когда Первая строка короче, чем общее количество элементов, в которое может поместиться матрица. загрузит следующую строку, но новая строка будет начинаться с новой строки в матрице, см. пример ниже -

 E.g. Input -   Line1: It was a bri   
                Line2: ght cold day in April, and the clocks were striking thirteen.

Код основан на подтвержденном вами результате, любых измененияхтребуется - дайте мне знать

...