StringBuffer sb = new StringBuffer();
br = new BufferedReader(new FileReader(file));
while ((lineStr = br.readLine()) != null) {
int i = 0;
while (i <= lineStr.length() - 1) {
ch = lineStr.charAt(i);
if ( ch == dyh.charAt(0)) {
sb.append(ch);
while(ischaracter){
if(i==lineStr.length() - 1)
{
while((lineStr=br.readLine())!=null)//下一行不为空
{
break;
}
if(!br.ready())////////文件为空
{
System.out.print("错误类型:单引号不匹配" + " 第 " + a + " 行 , 第 " + b + " 列1");
i++;
ischaracter=false;
break;
}
}
else {
ch = lineStr.charAt(++i); //继续读取下一个字符
}
}
为什么程序运行进入不了if(!br.ready())语句,判断文件为空时是用这个语句吗?
看了下代码,有2个逻辑错误
判断文件是否为空,使用readLine方法,如果返回null,表示为空
ready()表示文件是否准备完毕
if(!br.ready()) ////////文件为空
文件读入流后,一直处于准备中,因此程序不会进入if(!br.ready())语句
不清楚你的逻辑,只能部分修改你的代码,希望有帮助,代码和注释如下:
StringBuffer sb = new StringBuffer();br = new BufferedReader(new FileReader(""));
while ((lineStr = br.readLine()) != null) { // 这里是第一次去,如:第1行
int i = 0;
while (i <= lineStr.length() - 1) {
ch = lineStr.charAt(i);
if (ch == dyh.charAt(0)) {
sb.append(ch);
while (ischaracter) {
if (i == lineStr.length() - 1) {
}
if ((lineStr = br.readLine()) != null) { // 文件不为空:这个时候读取了下一行,针对上去是第2行
if (lineStr.trim().length() == 0) { // 去除空格后,长度等于0,表示这是个一空行
// 这是一个空行,加入你的逻辑
} else {
// 这行有内容,加入你的逻辑
}
} else {
// 这里是文件为空
// 加入你的逻辑
}
}
}
}
}追问
当第2行不为空时,我想返回while(ischaracter),即让他从第2行的第一个字符开始读取,到了第三行的最后一个字符,如果第4行不为空,则从第4行的第一个字符开始读取,直到文件结束,这个要怎么实现?
追答把你对文件的整个操作说1遍,可以吗,这样理解不是很清楚
例如 ischaracter 、dyh 都不清楚代表什么
1、先用readLine读取一行,再用ch读取这一行的每个字符
2、如果到了这一行的最后一个字符即(i==lineStr.length()-1)且下一行不为空,则ch从下一行的第一个字符继续读取,直到找到我想要的ch
3、如果到了文件最后一行的最后一个字符,还没找到我想要的ch,则输出错误。
那你的逻辑又问题,读完一行后,不存在字符,就可以直接继续下次循环,不需要再一次循环中读2行
你的意思是,如果我有个字符A,读取文件1.txt,只要A在1.txt存在一个A,程序打出A在第几行第几列,不存在就报错?
稍后给你代码,先看看,应该很清楚了
public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("E:\\1.txt"));
String ch = "A";
int row = 1, idx;
String lineStr;
// 一个循环
while ((lineStr = br.readLine()) != null) { // 读取一行,读完了循环==null,循环结束
if ((idx = lineStr.indexOf(ch)) > 0) {
System.out.println("字符[" + ch + "]在第" + row + "行第" + (idx + 1) + "列");
} else {
System.out.println("字符[" + ch + "]在第" + row + "行第不存在");
}
row++;
}
}
你可能没理解我的意思,我使用br.readline()一行一行读取文本,当读到最后一行时,他的下一行如果为空,则表示已经读取完文本,此时要怎么表示文本为空?
追答额 这个时候 他返回的是-1 你就发现已经没有了
追问所以说,请大神指点我一下,要怎么修改if(!br.ready())这个条件啊?
追答br.read()!=-1