2011-09-20 138 views
2

我想檢查一個字符串是否與另一個相同,或者也許,如果它是它與下面的代碼的一部分子:檢查一個字符串是否等於或其他

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.Scanner; 


public class Comparison { 

    static void compare() throws FileNotFoundException { 

     Scanner queries = new Scanner(new FileReader("./out.txt")); 
     Scanner folks = new Scanner(new FileReader("./tal.txt")); 
     int index1 = 0; 
     while (queries.hasNextLine()){ 
      String check = queries.next(); 

      while (folks.hasNextLine()) { 
       String toCheck = folks.next(); 
       index1 = toCheck.indexOf(check); 
      }//while 
     }//while 

     System.out.println("Result: "+ index1); 
    } 
} 

但我得到的錯誤如下:

 
Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:838) 
    at java.util.Scanner.next(Scanner.java:1347) 
    at results.Comparison.compare(Comparison.java:28) 
    at results.Main.main(Main.java:42) 

什麼問題?我怎樣才能使它工作?

+1

哪個管線28? –

+0

你確定你參考了正確的文件?用'./ [...]'引用類路徑外部的文件是危險的。 – home

+0

靜態無效比較()拋出FileNotFoundException文件引用是正確的... – user758084

回答

1

folks初始化需要是外環內,例如:

 Scanner queries = new Scanner(new FileReader("./out.txt")); 
     int index1 = 0; 
     while (queries.hasNextLine()){ 
      String check = queries.next(); 
      Reader r = new FileReader("./tal.txt"); 
      try { 
       Scanner folks = new Scanner(r); 
       while (folks.hasNextLine()) { 
        String toCheck = folks.next(); 
        index1 = toCheck.indexOf(check); 
        if (index1 >= 0) { 
         // Do something with index1 here? 
        } 
       }//while 
      } finally { 
       r.close(); 
      } 
     }//while 
+0

現在我把下面的錯誤:線程「main」中的異常java.io.FileNotFoundException:./NetBeansProjects/Results/tags_disticts_opacial.txt(太多打開的文件) \t at java.io.FileInputStream.open(Native Method) \t位於java.io.FileInputStream。 (FileInputStream.java:106) \t at java.io.FileInputStream。 (FileInputStream.java:66) \t at java.io.FileReader。 (FileReader.java:41) \t在results.Comparison.compare(Comparison.java:27) \t在results.Main.main(Main.java:42) – user758084

+0

@ user758084,我微微一驚你得到錯誤,但我更新了代碼以確保所有閱讀器儘快關閉。現在就試試。 – finnw

+0

它現在正在工作..非常感謝你..:P有一個愉快的一天... – user758084

2

我認爲你需要使用nextLine(),而不是next()。 如:

String check = queries.nextLine(); 

和:

String toCheck = folks.nextLine(); 

因爲默認的分隔符是空白,如果你有在文件的最後一個空行(也許其他的東西),有可能不是next(),即使hasNextLine()返回true。始終使用對應於您正在使用的下一個*()的hasNext *()方法 - (反之亦然---))。

相關問題