这是的工作
java.util.Scanner。随着即将发布的Java 9,您将编写:
List<MyClass> result;try(Scanner s=new Scanner(Paths.get("data.txt"))) { result = s.findAll("(\d{1,3}),\s*"([^"]*)"") //MyClass(int id, String text) .map(m -> new MyClass(Integer.parseInt(m.group(1)), m.group(2))) .collect(Collectors.toList());}result.forEach(System.out::println);但是由于
Stream生产
findAll在Java 8中不存在,因此我们需要一个辅助方法:
private static Stream<MatchResult> matches(Scanner s, String pattern) { Pattern compiled=Pattern.compile(pattern); return StreamSupport.stream( new Spliterators.AbstractSpliterator<MatchResult>(1000, Spliterator.ORDERED|Spliterator.NONNULL) { @Override public boolean tryAdvance(Consumer<? super MatchResult> action) { if(s.findWithinHorizon(compiled, 0)==null) return false; action.accept(s.match()); return true; } }, false);}findAll用这种辅助方法代替,我们得到
List<MyClass> result;try(Scanner s=new Scanner(Paths.get("data.txt"))) { result = matches(s, "(\d{1,3}),\s*"([^"]*)"") // MyClass(int id, String text) .map(m -> new MyClass(Integer.parseInt(m.group(1)), m.group(2))) .collect(Collectors.toList());}


