Автор сценария и пробелы? - PullRequest
1 голос
/ 08 октября 2011

Меня попросили написать назначение, в котором пользователю будет предложено ввести ключ и / или значение.

Пока вот мой код:

import java.util.Scanner;
import java.io.*;

class bTree
{
    //Fields


    static Scanner input = new Scanner(System.in);

    static boolean done = false;

    public static void main(String args[])throws Exception
    {
        FileWriter fWriter = new FileWriter("data.txt");
        do
        {
            System.out.print("Enter command: ");
            String enter[] = input.nextLine().split(" ", 3);

            if(enter[0].toLowerCase().equals("insert"))
            {

                fWriter.write(enter[1] + "\n" + enter[2] + "\n");
                fWriter.flush();
            }
            else if(enter[0].toLowerCase().equals("select"))
            {
                FileReader fReader = new FileReader("data.txt");
                Scanner fileInput = new Scanner(fReader);

                while(fileInput.hasNext() && done == false)
                {
                    if(fileInput.nextLine().equals(enter[1]))
                    {
                        System.out.println(fileInput.nextLine());
                        done = true;
                    }
                    else
                    {
                        fileInput.nextLine();
                    }
                }
                done = false;
            }
            else if(enter[0].toLowerCase().equals("update"))
            {

                fWriter.write(enter[2]);
                fWriter.flush();
            }
            else if(enter[0].toLowerCase().equals("exit"))
            {
                System.exit(0);
            }
        }
        while(true);
    }
}

Проблема: когда я открываю data.txt, пробелы отсутствуют. Так что, если я введу «insert 1001 gen» и «10001 genny», в блокноте это будет выглядеть как «1001gen10001genny». Есть предложения?

Ответы [ 4 ]

1 голос
/ 08 октября 2011

Проблема в том, что notepad.exe требователен к окончанию строки, и есть много возможностей.Когда вы пишете "\n" в FileWriter, он записывает один символ, а именно '\n'.Но в блокноте ожидается последовательность "\r\n".Он показывает один "\n" как ничто .

Вот ваш код, слегка модифицированный для обхода некоторых ловушек.

package so7696816;

import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Locale;
import java.util.Scanner;

public class Excercise {

  public static void main(String args[]) throws Exception {
    final Scanner input = new Scanner(System.in);
    PrintWriter fWriter = new PrintWriter("data.txt");

    while (true) {
      System.out.print("Enter command: ");
      String enter[] = input.nextLine().split(" ", 3);
      final String command = enter[0].toLowerCase(Locale.ROOT);

      if (command.equals("insert")) {
        fWriter.println(enter[1]);
        fWriter.println(enter[2]);
        fWriter.flush();

      } else if (command.equals("select")) {
        FileReader fReader = new FileReader("data.txt");
        Scanner fileInput = new Scanner(fReader);
        while (fileInput.hasNextLine()) {
          String key = fileInput.nextLine();
          String value = fileInput.nextLine();
          if (key.equals(enter[1])) {
            System.out.println(value);
            break;
          }
        }
        fReader.close(); // don't leave files open

      } else if (command.equals("update")) {
        fWriter.write(enter[2]);
        fWriter.flush();

      } else if (command.equals("exit")) {
        return;

      } else {
        System.err.println("Unknown command: " + command);
      }
    }
  }
}

Замечания:

  • Я использовал PrintWriter вместо FileWriter, чтобы получить правильные окончания строк.
  • Для команды select я закрыл fReader после его использования.
  • Я избегал многократного ввода enter[0].toLowerCase().
  • Я использовал правильный вариант toLowerCase.
  • Я добавил обработку ошибок для неизвестных команд.
  • Я переписалкоманда select должна быть немного более краткой.
0 голосов
/ 08 октября 2011

Как уже говорилось, символ перевода строки некорректен для блокнота.В качестве альтернативы вы можете заключить этот FileWriter в BufferedWriter и использовать метод newLine, чтобы всегда вставлять правильный перевод строки.

0 голосов
/ 08 октября 2011

Я думаю, что вы запускаете свою программу в UNIX. В системе Unix \ r \ n - это перевод строки.

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

1001

ген

10001

Genny

0 голосов
/ 08 октября 2011

Проблема в String enter[] = input.nextLine().split(" ", 3);, убивает Пространства.Поэтому добавляйте пробел после каждой записи массива или пишите дополнительные "" каждый раз, когда вы используете fWriter.write.

смотрите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...