簡體   English   中英

讀取並比較文件中的字符和字符串

[英]Reading and comparing the characters and strings from file

下面的代碼從文件'helpFile.txt'中讀取並檢查由'#'表示的索引。 從文件中讀取的變量存儲在整數c中,如果讀取的字符為“#”,則不將整數轉換為字符,然后將其與“#”進行比較。 我想知道比較是否有效,因為編譯器未顯示任何錯誤。 同樣,假設程序在文件中找到了“#”,並且在“#”之后緊跟着一個名為“ topic”的字符串,並使用readLine()對其進行了讀取。 “字符串信息= br.readLine()”將只是“主題”還是“#” +“主題”? 對不起,這個冗長的問題。 幫助非常感謝。

布爾值helpOn(字符串是什么){

    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
}

我嘗試了您的代碼,現在一切正常,我想您需要檢查您的“ helpFile.txt”。 我用它。

阿達德#你好

你好嗎

這就是我得到的結果。

c:35

主題:你好

信息:howareyou

我打印了您使用的所有三個變量。 c,主題,信息。 現在,由於您在讀取字符后使用readline(),因此您必須在“ helpFile.txt”的下一行中輸入“ info”

信息將在主題之后包含任何內容,因為您使用的是readline()函數,它將轉到下一行。 試試我的例子。

一旦遇到“#”,您的變量

C將具有“#”(35)。

然后

由於readline();主題在“#”之后到行尾將有任何內容。

然后

信息將在主題之后的下一行。

如果您正確設置了helpFile.txt的格式,則可以正常運行

編輯

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

您正在使用eclipse,並且我將文件保存在“ SRC”文件夾中。 將它們保存在您的項目文件夾中。 僅在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

阿達德#你好

你好嗎

$

其他文字在這里

等等等等等等...

...

現在,您可以將以下時間修改為:

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

循環一旦獲得“ $”將退出,並且此后將不打印任何內容。

您可能想閱讀正在使用的類的Javadoc(BufferedReader),可以在此處找到它,但是我認為可以將字符與==進行比較是正確的,因為char實際上是數字類型。 但是我建議您閱讀更多有關編碼的信息,因為我認為FileReader將使用默認的平台編碼來讀取您的文件,而這可能不是您的文件編碼。 告知文件編碼始終是一個好習慣。 關於第二個問題,再次根據javadoc,它將讀取整行(不是從您讀取char的點開始)。 希望有幫助,我goona稍后嘗試運行此命令以查看結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM