java - 如何使用java从特定行开始读取TextFile
问题描述
我想从特定行开始读取 TextFile 我有一个像这样的文本文件
#11
mango
apple
orange
END
#22
dog
cat
monkey
END
#33
car
bus
van
END
在这里我想得到#22和END之间的所有行
String text = new String(Files.readAllBytes(Paths.get("mypath")),
StandardCharsets.UTF_8);
//multiple lines to single line
text=text.replaceAll("[\r\n]+", " ");
Pattern pattern = Pattern.compile("#22(.*?)END");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
它在一行中提供输出(狗猫钱)。如何从文件中仅获取以下行(逐行)
dog
cat
monkey
我不确定特定数字(#22)之后是什么数字。例如,#33 是。仅使用 #22 和 END(在 #33 之前)的任何方法
解决方案
要匹配最后一个 END,您需要使用$
像 which mean end of file 这样的锚点"#22(.*?)END$"
,或者您可以删除?
您的正则表达式应该看起来像"#22(.*)END"
您还提到:
如何从文件中仅获取以下行(逐行)
你可以Pattern.DOTALL
这样使用:
//text = text.replaceAll("[\r\n]+", " ");// no need to this
Pattern pattern = Pattern.compile("#22(.*)END", Pattern.DOTALL);
这将返回:
dog
cat
monkey
END
#33
car
bus
van
编辑
我想要 #22 和 end 之间的文本(在 #33 之前)
在这可以使用这个正则表达式#22((.*)#33(.*?))END
Pattern pattern = Pattern.compile("#22((.*)#33(.*?))END", Pattern.DOTALL);
编辑
有什么办法不直接给出#33。因为没有数字顺序
您可以在这种情况下使用,其中数字可以由用户给出:
int number = 33;
String regex = String.format("#22((.*)#%d(.*?))END", number);
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
推荐阅读
- ajax - Laravel Ajax 下拉示例
- node.js - 无法在 Centos7 容器中公开 node express 应用程序的端口
- go - 具有“有一个”关联的查询(一对一)
- node.js - 在 3 个不同的 pod 中运行应用程序的 3 个组件
- git - git checkout & git pull : 执行时避免中间文件更改
- javascript - 服务工作者在服务器启动后不重新加载页面就无法工作
- javascript - 如何让 API 抽象层代码更干净
- npm - 如何在 gulp @4 中“浏览器同步 + LiveReload + 观看”
- sql-server - 计算运行总计
- inno-setup - UninstallRun 中的检查参数功能无法正常工作