Java 检查一个字符串是否等于另一个字符串的子字符串

Java 检查一个字符串是否等于另一个字符串的子字符串,java,string,indexof,Java,String,Indexof,我试图用下面的代码检查一个字符串是否与另一个相同,或者它是否是它的一部分: import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Scanner; public class Comparison { static void compare() throws FileNotFoundException { Scanner queries = new Scan

我试图用下面的代码检查一个字符串是否与另一个相同,或者它是否是它的一部分:

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) 线程“main”java.util.NoSuchElementException中出现异常 位于java.util.Scanner.throwFor(Scanner.java:838) 下一步(Scanner.java:1347) at results.Comparison.compare(Comparison.java:28) 在results.Main.Main(Main.java:42)
有什么问题?如何使其工作?

我认为您需要使用nextLine(),而不是next()。 例如:

以及:


因为默认分隔符是空白,所以如果文件末尾有一个空行(可能还有其他内容),则可能没有next(),即使hasNextLine()返回true也是如此。始终使用与正在使用的下一个*()对应的hasNext*()方法-(反之亦然;-)。

人员的初始化需要在外部循环中,例如:

        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

你确定引用了正确的文件?仅使用
/[…]
引用类路径外部的文件是危险的。静态void compare()抛出FileNotFoundException文件引用是正确的…顺便说一句:您的比较很有趣-它只会打印最后出现的找到的命中。现在我接受以下错误:线程“main”中的异常java.io.FileNotFoundException:./NetBeansProjects/Results/tags_disticts_opacial.txt(打开的文件太多)位于java.io.FileInputStream的java.io.FileInputStream.open(本机方法)位于java.io.FileInputStream。(FileInputStream.java:106)位于java.io.FileReader。(FileReader.java:41)位于Results.Comparison.compare(Comparison.java:27)在results.Main.Main(Main.java:42)@user758084,我对您出现这个错误感到有点惊讶,但我已经更新了代码,以确保所有阅读器都尽快关闭。现在就试试吧。
String toCheck = folks.nextLine();
        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