如何打印火柴的第一行



所以我的代码有问题。目前,这个函数中的matcher返回了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));
}

意味着它将循环,直到条件为真

如果一旦找到第一个匹配,此处将只执行一次

最新更新