2011-09-20 102 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 *()方法 - (反之亦然---))。

相关问题