2017-04-04 54 views
1

我正在嘗試編寫一個程序,該程序將接收用戶輸入(字符的長消息),存儲消息並搜索文本文件以查看如果這些單詞出現在文本文件中。我遇到的問題是我只能讀取消息的第一個字符串並將其與文本文件進行比較。例如,如果我輸入「學習」;在文本文件中的一個詞,我會得到一個結果顯示在文件中找到。但是,如果我鍵入「學習是」,它仍然只會返回學習文件中找到的單詞,即使「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

嘗試message = scan.nextLine();而不是消息= scan.next(); – Mark

+0

如果你想搜索你一次輸入的不同單詞,你需要一個可以分割的分隔符,這可以是每個字符,但它應該是唯一的,不應該出現在你的單詞中的某處,比如以「t」字符爲例 – XtremeBaumer

回答

0

我建議你先處理的文件,並建立了一套法律英語單詞:

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.txt文件中輸入的每個單詞:

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

如果你可以使用Java 8和流API

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

你有很多的解決方案,但是當涉及到尋找匹配,我建議你去看看的Pattern和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); 
      } 
     } 

} 
相關問題