java - 为什么不调用我的方法的其余部分?(循环被忽略)
问题描述
我正在尝试编写一个程序来读取文件,然后将其打印出来,然后再次读取,但第二次只打印出以“The”开头的行。它确实打印出文件的内容,但是它没有打印出以“The”开头的行,我不知道为什么。它在循环之前打印出 println 行,但随后它完全忽略了 for 循环。我的 findThe 方法和我的 OutputTheArray 方法之间的唯一区别是子字符串部分,所以我认为这是问题区域,但我不知道如何解决它。
import java.util.*;
import java.io.*;
public class EZD_readingFiles
{
public static int inputToArray(String fr[], Scanner sf)
{
int max = -1;
while(sf.hasNext())
{
max++;
fr[max] = sf.nextLine();
}
return max;
}
public static void findThe(String fr[], int max)
{
System.out.println("\nHere are the lines that begin with \"The\": \n");
for(int b = 0; b <= max; b++)
{
String s = fr[b].substring(0,4);
if(s.equals("The "))
{
System.out.println(fr[b]);
}
}
}
public static void OutputTheArray(String fr[], int max)
{
System.out.println("Here is the original file: \n");
for(int a = 0; a <= max; a++)
{
System.out.println(fr[a]);
}
}
public static void main(String args[]) throws IOException
{
Scanner sf = new Scanner(new File("EZD_readme.txt"));
String fr[] = new String[5];
int y = EZD_readingFiles.inputToArray(fr,sf);
EZD_readingFiles.OutputTheArray(fr,y);
int z = EZD_readingFiles.inputToArray(fr,sf);
EZD_readingFiles.findThe(fr,z);
sf.close();
}
}
这是我的带有测试数据的文本文件(EZD_readme.txt):
每个人都尽可能地努力。
最好的方法是这种方式。
日程安排非常好。
科斯莫克莱默是个傻瓜。
最好的电影被取消了。
解决方案
尝试克隆 sf 并将其传递给另一个函数。
像这样的东西:
Scanner sf = new Scanner(new File("EZD_readme.txt"));
Scanner sf1 = sf.clone();
int y = EZD_readingFiles.inputToArray(fr,sf);
EZD_readingFiles.OutputTheArray(fr,y);
int z = EZD_readingFiles.inputToArray(fr,sf1);
EZD_readingFiles.findThe(fr,z);
sf.close();
sf1.close();
推荐阅读
- sql - 选择具有多个类别的所有记录
- python - bot 认为除自身之外的所有服务器成员都处于脱机状态
- php - 使用 PHP-Bitly v4 缩短 URL 的问题
- json - 类型错误:订单未定义
- angular - 如何使用 ngb 日期选择器将日期值设置为 ngModel
- perforce - 如何更改 perforce 工作区的所有者?
- allure - 当我在 pytest 上添加 api 请求时无法生成 Allure 报告
- python - 无法从另一个程序内部运行 python/fpdf 脚本
- c++ - 为什么有些引脚不适用于wiringPi?
- node.js - Puppeteer:等待帧分离事件