首页 > 解决方案 > 如何打印匹配器的第一行?

问题描述

所以我的代码有问题。目前,这个函数中的匹配器返回 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

有人可以帮我解决这个问题吗?非常感谢 :)

标签: javaandroid

解决方案


改变

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 将只在找到第一个匹配项后执行一次


推荐阅读