java - 如何打印匹配器的第一行?
问题描述
所以我的代码有问题。目前,这个函数中的匹配器返回 3 行而不是 1 行。我希望它只返回它找到的第一行。这是我的功能:
private void getLibraryMap(String libraryName) {
File file = new File("/proc/self/maps");
if (file.exists()) {
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader("/proc/self/maps"));
String line;
while ((line = bufferedReader.readLine()) != null) {
if (line.contains(libraryName)) {
String lines = line.replace(String.valueOf(Pattern.compile("\\s+")), " ");
Pattern regex = Pattern.compile("\\p{XDigit}+");
Matcher matcher = regex.matcher(lines).region(0, 8);
while (matcher.find()) {
long startAddress = Long.parseLong(matcher.group(0));
Log.e("MainActivity", String.valueOf(startAddress));
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这就是我调用它的方式:
getLibraryMap("libwebviewchromium_loader.so");
这是我从中得到的日志:
E/MainActivity: 96862000
96864000
E/MainActivity: 96865000
有人可以帮我解决这个问题吗?非常感谢 :)
解决方案
改变
while (matcher.find()) {
long startAddress = Long.parseLong(matcher.group(0));
Log.e("MainActivity", String.valueOf(startAddress));
}
至
if (matcher.find()) {
long startAddress = Long.parseLong(matcher.group(0));
Log.e("MainActivity", String.valueOf(startAddress));
}
while表示它将循环直到条件为真
if here 将只在找到第一个匹配项后执行一次
推荐阅读
- powershell - 无法读取 CSV 的最后一行
- wordpress - Wordpress 中的 jsPDF 导致未捕获的类型错误(无法读取属性“长度”)
- android - 如何使 RecyclerView 项目的顺序保持不变(拖放后)?
- javascript - Eloquent Javascript 帮助新手
- angular - Angular 中的单例服务(带 Ionic)
- python - 为什么装饰器中的递归函数调用它的内部函数
- php - 在提交按钮单击登录详细信息后如何将用户重定向到主页
- javascript - 第一次渲染时无法读取 null 错误的属性“值”
- sql - 更新子查询 psql
- php - Symfony 在使用 CachingHttpClient 错误调用不受信任的远程时阻止 RCE