2

私は現在、単純なファイルからテキストを取り込んで別のファイルに書き込む小さなプログラムを書いています。入力ファイルは、「madlibs」のような取引のようなもので、「」や「」などのトークンを配置する必要があります。

文章:

> One of the most <adjective> characters in fiction is named "Tarzan of the <plural-noun>." Tarzan was raised by a/an <noun> and lives in the <adjective> jungle in the heart of darkest <place>.

コード:

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

public class Story {

public static void main(String[] args) throws FileNotFoundException {

    Scanner sc = new Scanner(System.in);
    System.out.print("Input file name? ");
    String infileName = sc.next();
    Scanner input = new Scanner(new File(infileName));

    System.out.print("Output file name? ");
    String outfileName = sc.next();
    PrintStream out = new PrintStream(new File(outfileName));

    while (input.hasNext()){

        String current = input.next();
        System.out.println(current);
        int openIndex = current.indexOf("<");
        int closeIndex = current.indexOf(">");
        current = current.substring(openIndex + 1, closeIndex - openIndex);
        System.out.println(current);

        if (current.equals("adjective")){
            System.out.print("Please enter an adjective: ");
            current = sc.next();
            out.print(current);
            out.print(" ");
        } else if (current.equals("plural-noun")){
            System.out.print("Please enter a plural noun: ");
            current = sc.next();
            out.print(current);
            out.print(" ");
        } else if (current.equals("noun")){
            System.out.print("Please enter a noun: ");
            current = sc.next();
            out.print(current);
            out.print(" ");
        } else if (current.equals("place")){
            System.out.print("Please enter a place: ");
            current = sc.next(); 
            out.print(current);
            out.print(" ");
        } else {
            out.print(current);
            out.print(" ");
        }
    }
}
}

これが私が抱えている問題のようです。ユーザーが入力した単語だけが「out1.txt」などに印刷されており、各単語の間にいくつかのスペースがあります。

どんな助けでもありがたいです、みんなと女の子に感謝します!

4

2 に答える 2

1

問題は通常の単語、つまり「<変数>」ではない単語にあります。

int openIndex = current.indexOf( "<" );    // returns -1
int closeIndex = current.indexOf( ">" );   // returns -1 too
current = current.substring( openIndex + 1, closeIndex - openIndex );
// at this place for a normal word current is empty

「if」を追加する必要があります

String current = input.next();
int openIndex = current.indexOf( "<" );
if( openIndex > -1 )
{
    int closeIndex = current.indexOf( ">" );
    current = current.substring( openIndex + 1, closeIndex - openIndex );
}
System.out.println( current );

もう1つの問題は、トークン[。 "]([]内)にあります。コードは<>と。"内の文字のみを取ります。失われます。

String current      = input.next();
String cstStrBefore = "";
String cstStrAfter  = "";
int openIndex = current.indexOf( "<" );
boolean var = ( openIndex > -1 );
if( var )
{
   int closeIndex = current.indexOf( ">" );
   cstStrBefore = current.substring( 0, openIndex );
   cstStrAfter  = current.substring( closeIndex + 1 );
   current      = current.substring( openIndex + 1, closeIndex - openIndex );
}

これが私が使用するJava7コード全体です。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;

public class Story {
   public static void main( String[] args ) throws FileNotFoundException {
      Scanner     sc    = new Scanner( System.in );
      Scanner     input = new Scanner( new File( "Story.txt" ));
      PrintStream out   = new PrintStream( "Story-out.txt" );
      while( input.hasNext()) {
         String current      = input.next();
         String cstStrBefore = "";
         String cstStrAfter  = "";
         int openIndex = current.indexOf( "<" );
         boolean var = ( openIndex > -1 );
         if( var ) {
            int closeIndex = current.indexOf( ">" );
            cstStrBefore = current.substring( 0, openIndex );
            cstStrAfter  = current.substring( closeIndex + 1 );
            current      =
               current.substring( openIndex + 1, closeIndex - openIndex );
         }
         System.out.println( current );
         switch( current ) {
         case "adjective"  : System.out.print( "Please enter an adjective: " ); break;
         case "plural-noun": System.out.print( "Please enter a plural noun: " ); break;
         case "noun"       : System.out.print( "Please enter a noun: " ); break;
         case "place"      : System.out.print( "Please enter a place: " ); break;
         }
         if( var ) {
            current = sc.next();
         }
         out.print( cstStrBefore + current + cstStrAfter + ' ' );
      }
      sc.close();
      input.close();
      out.close();
   }
}

開発にはNetbeansまたはEclipseを使用することをお勧めします。

于 2012-10-31T17:07:38.720 に答える
1

使用後に開いているストリームを閉じることもお勧めします。(JVMがおそらくこれを処理しますが)

out.close(); input.close(); sc.close();

あなたのしばらくの間{}

于 2012-10-31T17:13:16.530 に答える