1

コードは正常に機能しています。可能な限り、テキストファイルの最後にchar0Dが出力されないようにする方法が知りたいです。ありがとうございました。それが役立つ場合は、ここにコードがあります。それが平凡で、まだJavaを学んでいるなら、ごめんなさい。

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

   public class Driver{
      String inputFile, input;
      Scanner kb = new Scanner(System.in);
      PrintWriter output = new PrintWriter(System.out);
      File file; 
      BST tree = new BST();
      Trie trie = new Trie();


      public static void main(String[] args){
         Driver driver = new Driver();
         boolean done = false;  

         driver.initialDataFromFile();
         while (!done){      
            done = driver.menu(true);   
         }
      }

      public void initialDataFromFile() {
         System.out.println("Welcome to Project0");
         System.out.println("What is the name of the input file?");
         System.out.print("> ");
         inputFile = kb.nextLine(); 
         File file = new File(inputFile);

         try{
            Scanner scanner = new Scanner(file);

            while(scanner.hasNextLine()){
               String in = scanner.nextLine();
               tree.insert(in);
               trie.insert(in);
            }
            System.out.println("Finished reading the file");

         }
            catch(FileNotFoundException e){
               System.out.println("File does not exist");
               System.exit(1);
            }
      }

      public boolean menu(boolean done){      
         System.out.print("Please enter your command\r>");
         input = kb.next();
         File file = new File(inputFile);
         PrintWriter output = null;// = new PrintWriter(inputFile);

         if(input.toLowerCase().equals("quit")){
            System.out.println("Quitting");
            System.out.println("Writing updated info to " + inputFile);     
            try{
               output =  new PrintWriter(file);
             //   String str = "";
//                str += tree.toString();
               output.println(tree.toString());  

               output.close();

            }
               catch(IOException e){
                  System.out.print("error");}
            System.out.println("Goodbye");    
            return true;       
         }

         else if(input.toLowerCase().equals("insert")){
            input = kb.next();
            tree.insert(input);
            trie.insert(input);
            System.out.println();
            return false;
         }
         else if(input.toLowerCase().equals("delete")){
            input = kb.next();
            tree.delete(input);
            trie.delete(input);
            System.out.println();  
            return false;
         }
         else if(input.toLowerCase().equals("find")){
            input = kb.next();
            tree.find(input);
            trie.find(input);
            System.out.println();
            return false;
         }
         else if(input.toLowerCase().equals("print")){
            tree.print();
            trie.print();
            System.out.println();
            return false;
         }
         else{
            System.out.println("Not A Valid Choice");
            System.out.println();
            return false;
         }
      }
   }
4

2 に答える 2

2
printWriter.println("...")

OSに依存するline.separatorプロパティを使用して、行区切り文字の順序を決定します。

これらのメソッドは、改行文字ではなく、プラットフォーム独自の行区切り文字の概念を使用します。

それはたまたま\rあなたのコンピュータ上で(?)OD(のJavaDocからPrintWriter.println()):

行区切り文字列はシステムプロパティによって定義され、line.separator必ずしも単一の改行文字('\n')である必要はありません。

プレーンprint()を使用して、必要な文字を添付するだけです。

printWriter.print("...\n")

...またはプロパティをオーバーライドしline.separatorます。

于 2012-11-06T20:39:18.903 に答える
1

たとえば、line.separatorシステムプロパティを使用して、OSに依存しない出力を提供できます。

http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

于 2012-11-06T20:35:28.437 に答える