Добавить пробел после каждого слова в файле (Java) - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу добавить пробел после каждого слова в файле. Например, это становится тестом

Мне удалось добавить пробел в конце файла, используя .write

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

try {
    String filename = "test.txt";
    FileWriter fw = new FileWriter(filename,true);
    fw.write(" ");
    fw.close();
} catch(IOException ioe)
  {
      System.err.println("IOException: " + ioe.getMessage());
  }

Это код, который я использовал для поиска слов

 try {
     File file = new File(WORD_FILE);
     Scanner scanner = new Scanner(file);
     while (scanner.hasNextLine()) {
         String line = scanner.nextLine();
         for(String word : line.split("\\s")) {
            if (!word.isEmpty())
                System.out.println(word);
          }
      }
      scanner.close();
   } catch (FileNotFoundException e) {
        System.out.println("File not found.");
   }

Он добавил пробел в конце файлано я хотел добавить пробел после каждого слова

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

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

String filename = "test.txt";
Charset charset = Charset.defaultCharset(); // StandardCharsets.UTF_8
Path path = Paths.get(filename);
List<String> lines = Files.lines(path, charset)
    .map(line -> line.replaceAll("\\s+", "$0 "))
    .collect(Collectors.toList());
Files.write(path, lines, charset);

Здесь я читаю строки как Stream<String> из отдельных строк.Я заменяю пробел \\s+ тем же самым и дополнительным пробелом.

Однако, чтобы разбить «thisisatest» на слова, вам необходимо знание английского языка.

    .map(line -> replaceWords(line))

List<String> allWords = Arrays.asList(
    "are", "a",
    "island", "is",
    "tests", "test",
    "thistle", "this", "th" /*5th*/
);

String replaceWords(String line) {
    StringBuilder sb = new StringBuilder();
    ... loop through letter sequences (multiple words)
    ... and split them by sorted dictionary.
    return sb.toString();
}

Поскольку это выглядит как домашняя работа, илипо крайней мере, некоторые интересные усилия должны остаться, остальное зависит от вас.

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

Вот несколько ответов, которые могут помочь вам найти подход к вашей проблеме:

Ваша проблема в том, что сканер читает так называемый Token, а для разделения токенов сканер использует Delimiter. Разделителем по умолчанию является whitespace.

Так что независимо от того, как вы решите свою проблему, вам понадобится разделитель, который используется для разделения того, что вы называете словом. Если быть точным, я назову это Token.

Вы можете использовать пользовательский разделитель в Scanner, вызвав
scanner.useDelimiter(",") //e.g. use a comma

Когда вы используете BufferedReader, вам нужно разделить строки чтения на String.split(), что позволяет вам также указывать пользовательский разделитель в качестве параметра.

...