2017-04-04 11 views
1

ユーザー入力(長い文字メッセージ)を受け取ってメッセージを保存し、テキストファイルを検索して表示するプログラムを作成しようとしていますそれらの単語がテキストファイル内にある場合。私が抱えている問題は、メッセージの最初の文字列を読み込み、それをテキストファイルと比較できることだけです。たとえば、「学習」と入力すると、テキストファイルの単語、私はそのファイルに見つかったことを示す結果を取得します。しかし、私が "learning is"と入力した場合、 "is"がテキストファイルの単語であっても、ファイル内の単語として学習を返すだけです。私のプログラムは空白を過ぎて読むことができないようです。だから私は私の質問は、私はこれを行うには、ファイル内のすべての単語を読む私のプログラムを増やすことですか?また、私のプログラムでは、ユーザーから取った元のメッセージにスペースを入れてもしなくても、すべての単語を読み、それをテキストファイルと比較することは可能でしょうか? 複数の文字列を読み込んでテキストファイルと比較するためにJavaでプログラムを書く

あなたは

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

public class Affine_English2 

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

     String message = ""; 
     String name = ""; 

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

     System.out.println("Please enter in a message: "); 
     message = scan.next(); 

     Scanner file = new Scanner(new File("example.txt")); 


      while(file.hasNextLine()) 
      { 
       String line = file.nextLine(); 

       for(int i = 0; i < message.length(); i++) 
       { 
        if(line.indexOf(message) != -1) 
        { 
         System.out.println(message + " is an English word "); 
         break; 
        } 
       } 

      } 

    } 

} 
+2

Try message = scan.nextLine(); message = scan.next()の代わりに。 – Mark

+0

一度に入力する異なる単語を検索する場合は、分割できる区切り文字が必要ですが、これはすべての文字にすることができますが、一意である必要があります。例としての文字 't' – XtremeBaumer

答えて

0

のJava 8とストリームAPIを使用することができる場合、私はあなたのファイルを最初のプロセスをお勧めしますし、法的な英語の単語のセットを構築:

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

    Set<String> legalEnglishWords = new HashSet<String>(); 
    Scanner file = new Scanner(new File("example.txt")); 

    while (file.hasNextLine()) { 
    String line = file.nextLine(); 

    for (String word : line.split(" ")) { 
      legalEnglishWords.add(word); 
     } 
    } 

    file.close(); 

次に、ユーザからの入力を取得:それは法的な単語である場合

最後に
Scanner input = new Scanner(System.in); 
    System.out.println("Please enter in a message: "); 
    String message = input.nextLine(); 
    input.close(); 

、トークンにユーザーの入力を分割し、それぞれを確認してください:

for (String userToken : message.split(" ")) { 
     if (legalEnglishWords.contains(userToken)) { 
      System.out.println(userToken + " is an English word "); 
     } 
    } 
    } 
} 
0

あなたがこれを試みるかもしれありがとうございます。このソリューションを使用すると、あなたのEXAMPLE.SQLのファイルで、ユーザが入力した各単語を見つけることができます:マークはコメントで指摘したように

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

    String message = ""; 
    String name = ""; 

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

    System.out.println("Please enter in a message: "); 
    message = scan.nextLine(); 

    Scanner file = new Scanner(new File("example.txt")); 

    while (file.hasNextLine()) 
    { 
     String line = file.nextLine(); 

     for (String word : message.split(" ")) 
     { 
     if (line.contains(word)) 
     { 
      System.out.println(word + " is an English word "); 
     } 
     } 
    } 
    } 
0

は、変更

scan.next(); 

へ:

scan.nextLine(); 

はうまくいくはずです、私は試して私のために働く。

0

あなたは

public static void main(String[] args) throws Exception{ // You need to handle this exception 

    String message = ""; 
    Scanner input = new Scanner(System.in); 

    System.out.println("Please enter in a message: "); 
    message = input.nextLine(); 

    List<String> messageParts = Arrays.stream(message.split(" ")).collect(Collectors.toList()); 

    BufferedReader reader = new BufferedReader(new FileReader("example.txt")); 

    reader.lines() 
      .filter(line -> !messageParts.contains(line)) 
      .forEach(System.out::println); 

} 
0

あなたは多くのソリューションを持っているが、それは私はあなたが、パターンとMatcherのに見てみると、正規表現 を使用することをお勧めマッチを見つけるために来るとき、私は完全にあなたの質問を理解していないが、あなたは追加行うことができます私はコードをテストしませんでしたが、アイデアはうまくいくはずです:

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

    String message = ""; 
    String name = ""; 

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

    System.out.println("Please enter in a message: "); 
    message = scan.next(); 

    Scanner file = new Scanner(new File("example.txt")); 

    String pattern = ""; 

    for(String word : input.split(" ")){ 
     pattern += "(\\b" + word + "\\b)"; 
    } 

    Pattern r = Pattern.compile(pattern); 

     while(file.hasNextLine()) 
     { 
      String line = file.nextLine(); 
      Matcher m = r.matcher(line); 

      if(m.matches()) { 
       System.out.println("Word found in: " + line); 
      } 
     } 

} 
関連する問題