1

ユーザーがキーや値を入力するように求められる割り当てを作成するように依頼されました。

これまでのところ、私のコードは次のとおりです。

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

4 に答える 4

1

問題は、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);
      }
    }
  }
}

備考:

  • 行末を正しくするために、 a のPrintWriter代わりに aを使用しました。FileWriter
  • selectコマンドについては、fReader使用後に閉じました。
  • enter[0].toLowerCase()複数回入力することは避けました。
  • の適切なバリアントを使用しましたtoLowerCase
  • 不明なコマンドのエラー処理を追加しました。
  • selectコマンドをもう少し簡潔に書き直しました。
于 2011-10-08T13:18:07.253 に答える
0

問題はString enter[] = input.nextLine().split(" ", 3);、それがスペースを殺してしまうことです。したがって、各配列エントリの後にスペースを追加するか、を使用するたびに追加の「」を記述してくださいfWriter.write

ここを見て

于 2011-10-08T12:40:04.537 に答える
0

既に述べたように、改行文字はメモ帳では正しくありません。または、その FileWriter を BufferedWriter でラップし、newLine メソッドを使用して常に正しい改行を挿入することもできます。

于 2011-10-08T18:59:23.940 に答える
-1

プログラムを UNIX で実行していると思います。UNIX システムでは、「\r\n」は改行です。

プログラムを Windows で実行している場合、ファイルには次のようなものが含まれているはずです。

1001

世代

10001

ジェニー

于 2011-10-08T13:14:39.020 に答える