在Java 9中,您可以使用
static final Pattern LINE_WITH_ConTINUATION = Pattern.compile("(\V|\R\+)+");…try(Scanner s = new Scanner(file)) { s.findAll(LINE_WITH_CONTINUATION) .map(m -> m.group().replaceAll("\R\+", "")) .forEach(System.out::println);}由于Java 8缺少该
Scanner.findAll(Pattern)方法,因此您可以添加操作的自定义实现来解决
public static Stream<MatchResult> findAll(Scanner s, Pattern pattern) { return StreamSupport.stream(new Spliterators.AbstractSpliterator<MatchResult>( 1000, Spliterator.ORDERED|Spliterator.NONNULL) { public boolean tryAdvance(Consumer<? super MatchResult> action) { if(s.findWithinHorizon(pattern, 0)!=null) { action.accept(s.match()); return true; } else return false; } }, false);}可以像
try(Scanner s = new Scanner(file)) { findAll(s, LINE_WITH_CONTINUATION) .map(m -> m.group().replaceAll("\R\+", "")) .forEach(System.out::println);}这将使将来的迁移变得容易。



