Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8:行位置引用,当应用过滤器时,流,foreach_Foreach_Java 8_Location_Java Stream_Lines - Fatal编程技术网

Java8:行位置引用,当应用过滤器时,流,foreach

Java8:行位置引用,当应用过滤器时,流,foreach,foreach,java-8,location,java-stream,lines,Foreach,Java 8,Location,Java Stream,Lines,我不知道是否可能: 我想知道某个文件中某个单词所在的数字行 try { CharsetDecoder dec = StandardCharsets.UTF_8.newDecoder() .onMalformedInput(CodingErrorAction.IGNORE); try (Reader r = Channels.newReader(FileChannel.open("path"), dec, -1); Buffer

我不知道是否可能:

我想知道某个文件中某个单词所在的数字行

   try {
      CharsetDecoder dec = StandardCharsets.UTF_8.newDecoder()
          .onMalformedInput(CodingErrorAction.IGNORE);
      try (Reader r = Channels.newReader(FileChannel.open("path"), dec, -1);
          BufferedReader br = new BufferedReader(r)) {
        br.lines().filter(line -> line.contains("SomeWord"))
            .forEach(line -> System.out.println("location:" + line.????)); //Location where line has the "SomeWord"
      }
    } catch (IOException |java.io.UncheckedIOException ex) {
      Logger.getLogger(RecursiveFolderAndFiles.class.getName())
          .log(Level.SEVERE, null, ex);
    }

如何执行此操作?

您可以在
br.lines()
上收集到一个列表,然后利用
IntStream.range
进行如下操作:

...
...
List<String> resultSet = br.lines().collect(Collectors.toList());
IntStream.range(0, resultSet.size())
         .filter(index -> resultSet.get(index).contains("SomeWord"))
         .forEach(index -> System.out.println("location:" + index));
...
...
。。。
...
List resultSet=br.lines().collect(Collectors.toList());
IntStream.range(0,resultSet.size())
.filter(index->resultSet.get(index).contains(“SomeWord”))
.forEach(index->System.out.println(“位置:+index”);
...
...

现在,您应该可以同时访问索引和行。

您不一定需要流来处理这个或java-8。。。有一个
LineNumberReader
扩展了
BufferedReader
,因此您可以执行以下操作:

LineNumberReader lnr = new LineNumberReader(r)) {
   String line;
   while ((line = lnr.readLine()) != null) {  
       if(line.contains("SomeWord")) {
             System.out.println("location:" + lnr.getLineNumber())
       }
   }