从文件中读取和比较字符和字符串

时间:2012-04-22 05:47:13

标签: java

下面的代码从文件'helpFile.txt'中读取,并检查由'#'表示的索引。 从文件读取的变量存储在整数c中,如果读取的字符为“#”,则将其与“#”进行比较,而不将整数转换为字符。我想知道比较是否有效,因为编译器没有显示任何错误。 此外,假设文件中的程序找到'#',并且紧跟在'#'之后的名为'topic'的字符串,并使用readLine()读取它。 'String info = br.readLine()'只是'主题'还是'#'+'主题'? 抱歉这么冗长的问题。非常感谢。

boolean helpOn(String what){

    private BufferedReader br;
    private String info, topic;
    private static PrintWriter pw = new PrintWriter(System.out, true);
    int c;


        br = new BufferedReader(new FileReader("helpFile.txt"));

    try{
        do{
            //read characters until '#' is found
            c = br.read();


            if(***c=='#'***){   //check if the character is '#'
                pw.println(c);
                if((**topic=br.readLine()**).equalsIgnoreCase(what)){   //check if 'what' string is equal to 's' which is the string after '#'
                    while((info=br.readLine())!=null){  //print info until the end of info
                        if(info!=null)
                            pw.println(info);
                    }
                    return true;
                }
            }
        }
        while(c!=-1);
    }
    catch(IOException ex){
        pw.println("File error.");
        ex.printStackTrace();
        try{
            br.close();
        }
        catch(IOException e){
            pw.println("Error closing file.");
            e.printStackTrace();
        }
        return false;
    }

    try{
        br.close();
    }
    catch(IOException ex){
        pw.println("Error closing file.");
        ex.printStackTrace();
    }
    return false; //topic not found
}

2 个答案:

答案 0 :(得分:1)

我尝试了你的代码,它对我很好,我想你需要检查你的“helpFile.txt”。我用它了。

  

阿达德#你好

     

howareyou

这是我得到的结果。

  

c:35

     

主题:你好

     

info:howareyou

我打印了你使用的所有三个变量。 c,主题,信息。 现在,因为你在阅读一个字符后使用readline(),你必须从“helpFile.txt”的下一行给出你的“信息”

info将包含主题之后的任何内容,因为您正在使用readline()函数,它将转到下一行。试试我的例子。

遇到“#”时,你的var

  

C将有“#”(35)。

然后

  由于readline();

主题在“#”之后会有任何内容,直到行尾

然后

  

info将在主题后面有下一行。

如果您正确格式化helpFile.txt,这将正常工作

修改

  

我必须每次都指定完整的文件名

您正在使用eclipse,并且您将文件保存在“SRC”文件夹中。将它们保存在Project文件夹中。只有一个在SRC文件夹上方然后执行此操作。

br = new BufferedReader(new FileReader("helpFile.txt"));

它应该有用。

<强> EDIT2 你不需要检查信息为空两次

while((info=br.readLine())!=null){
//print info until the end of
//  if(info!=null) noT needed, u alreay did that above
pw.println("info"+info);
             }

如果它为NULL,它将自动退出循环。

<强> EDIT3

  

我不想打印所有文本

当你使用#来标记块的开头时,你可以使用任何东西来标记它的结尾。例如

  

<强> helpFile.txt

     

阿达德#你好

     

howareyou

     

$

     

此处的其他文字

     等等等等等等。

     

...

现在,您可以将while修改为:

while(!(info=br.readLine()).equals("$")){
      pw.println("info"+info);
                            }

一旦获得“$”,循环就会退出,之后不会打印任何内容。

答案 1 :(得分:0)

你可能想要读取你正在使用的类的javadoc(BufferedReader),它可以找到here,但我认为将字符与==进行比较是可以的,因为char实际上是一种数字类型。但我建议你阅读更多关于enconding,因为我认为FileReader将使用默认的plataform编码来读取你的文件,这可能不是你的文件编码。告知文件的编码总是好的做法。 关于第二个问题,根据javadoc(再次),它将读取整行(不是从您读取char的点)。希望有所帮助,我是goona尝试稍后运行以查看结果