如何统计从Results.txt提取的含Goal/goal的句子数量?
实现统计含"Goal"/"goal"句子数量的方法
嘿,这个需求超简单的!我来给你两种实现思路,你可以根据自己现有代码的结构来选:
方案一:在原有打印方法中同时统计并返回数量
如果你想让原来的方法既打印句子又返回统计数,可以直接在方法里加一个计数变量,每找到符合条件的句子就递增,最后返回这个数值:
public class GoalSentenceProcessor { // 修改原有方法,让它返回统计数量 public int printAndCountGoalSentences() { int sentenceCount = 0; // 用try-with-resources自动关闭流,避免资源泄漏 try (BufferedReader br = new BufferedReader(new FileReader("Results.txt"))) { String line; while ((line = br.readLine()) != null) { // 转成小写判断,同时匹配"Goal"和"goal" if (line.toLowerCase().contains("goal")) { System.out.println(line); // 打印符合条件的句子 sentenceCount++; // 计数+1 } } } catch (IOException e) { e.printStackTrace(); } return sentenceCount; // 返回最终统计的数量 } }
调用的时候直接接收返回值就行,如果你的Results.txt里正好有2个符合条件的句子,返回的就是2:
public static void main(String[] args) { GoalSentenceProcessor processor = new GoalSentenceProcessor(); int count = processor.printAndCountGoalSentences(); System.out.println("符合条件的句子总数:" + count); // 输出2 }
方案二:单独写一个统计方法(职责分离)
如果想让代码职责更清晰,把打印和统计分开成两个独立的方法,这样后续维护更方便:
public class GoalSentenceProcessor { // 原有的打印方法,保持不变 public void printGoalSentences() { try (BufferedReader br = new BufferedReader(new FileReader("Results.txt"))) { String line; while ((line = br.readLine()) != null) { if (line.toLowerCase().contains("goal")) { System.out.println(line); } } } catch (IOException e) { e.printStackTrace(); } } // 新增的统计方法,专门负责计数 public int countGoalSentences() { int sentenceCount = 0; try (BufferedReader br = new BufferedReader(new FileReader("Results.txt"))) { String line; while ((line = br.readLine()) != null) { if (line.toLowerCase().contains("goal")) { sentenceCount++; } } } catch (IOException e) { e.printStackTrace(); } return sentenceCount; } }
调用示例:
public static void main(String[] args) { GoalSentenceProcessor processor = new GoalSentenceProcessor(); processor.printGoalSentences(); // 先打印符合条件的句子 int count = processor.countGoalSentences(); // 再统计数量 System.out.println("统计结果:" + count); // 返回2 }
小提示
- 用
line.toLowerCase().contains("goal")可以忽略大小写,同时匹配"Goal"、"goal"甚至"GOAL"这类变体 - 这里默认每一行是一个句子,如果你的文本里句子是跨多行的(比如换行但没结束),可能需要调整判断逻辑,但根据你的描述,按行处理应该就够用啦
内容的提问来源于stack exchange,提问作者Simmer 127
相关产品推荐
相关产品推荐

