[英]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.