Java从缓冲读取器创建字符串并比较字符串

Java从缓冲读取器创建字符串并比较字符串,java,bufferedreader,Java,Bufferedreader,我正在使用Java+Selenium 1测试一个web应用程序 我必须使用befferedreader.readLine逐行读取文本文件,并将找到的数据与另一个字符串进行比较 有没有办法给每一行分配一个唯一的字符串?我想应该是这样的: FileInputStream fstream = new FileInputStream("C:\\write.txt"); DataInputStream in = new DataInputStream(fstream); Buffe

我正在使用Java+Selenium 1测试一个web应用程序

我必须使用befferedreader.readLine逐行读取文本文件,并将找到的数据与另一个字符串进行比较

有没有办法给每一行分配一个唯一的字符串?我想应该是这样的:

    FileInputStream fstream = new FileInputStream("C:\\write.txt");
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));

    String strLine;
    String[] strArray = null;
    int p=0;
        // Read File Line By Line

    while ((strLine = br.readLine()) != null) {
        strArray[p] = strLine;
        assertTrue(strArray[p].equals(someString));
        p=p+1;
    }

问题是您不知道有多少行,因此无法正确调整数组大小。改为使用
列表。

按重要性递减的顺序

  • 正如Perception所指出的,您根本不需要将
    字符串存储在数组中
  • 正如Qwerky所指出的,您不知道有多少行,如果您确实需要存储它们,您应该使用可调整大小的集合,如
    ArrayList
  • 不需要
    DataInputStream
    :您可以直接将
    FileInputStream
    包装在
    InputStreamReader

您可以尝试以下方法:

public final static String someString = "someString";

public boolean isMyFileOk(String filename){
    Scanner sc = new Scanner(filename);
    boolean fileOk = true;
    while(sc.hasNext() && fileOk){
        String line = sc.nextLine();
        fileOk = isMyLineOk(line);
    }
    sc.close();
    return fileOk;
}

public boolean isMyLineOk(String line){
    return line.equals(someString);
}
该类通常是读取文件的好类:)


正如建议的那样,您可以一次检查一行,而不是在处理它们之前将它们全部加载到内存中。如果文件相对较小,这可能不是问题,但最好保持代码的可伸缩性,尤其是在执行完全相同的操作时:)

实际上根本不需要字符串数组,除非您计划稍后使用它。只需使用您已经创建的strLine变量。