开发手册 欢迎您!
软件开发者资料库

Java 获取字符在字符串中出现位置下标索引的方法

本文介绍Java 8/9中,通过IntStream或Stream.of实现,获取单个字符在一个字符串中出现的位置索引下标列表的方法。实现的效果:getIndexList(“Hello world!”, 'l') 方法返回字符l在Hello world!字符串中出现位置下标的列表[2, 3, 9]。

1、 使用IntStream实现的几种方法

intStream文档https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html

1) IntStream.range

public static List getIndexList(String s, char c) {
return IntStream.range(0, s.length())
.filter(index -> s.charAt(index) == c)
.boxed()
.collect(Collectors.toList());
}

2) IntStream.iterate

public static List getIndexList(String s, char c) {    return IntStream.iterate(s.indexOf(c), i -> s.indexOf(c, i + 1))            .takeWhile(i -> i > -1)            .boxed()            .collect(Collectors.toList());}

private static List getIndexList(String word, char c) {  return IntStream          .iterate(word.indexOf(c), index -> index >= 0, index -> word.indexOf(c, index + 1))          .boxed()          .collect(Collectors.toList());}

2、使用Stream.of实现

Stream.of("Hello world!")            .map(Scanner::new)            .flatMap(s -> s.findAll("l"))            .map(mr -> mr.start())            .forEach(System.out::println);