Java 8/9使用Stream获取字符出现在字符串的索引列表

需求是这样的:输入一个字符串和一个字符,返回此字符出现在字符串里的所有索引。

可以使用for循环迭代字符串可以实现此需求。考虑了下java8和java9的实现方案。

java 8使用IntStream的实现方案

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

Java 9使用IntStream的iterate

public static List<Integer> getIndexes(String s, char c) {
  return IntStream
          .iterate(s.indexOf(c), index -> index >= 0, index -> s.indexOf(c, index + 1))
          .boxed()
          .collect(Collectors.toList());
}

iterate的方法

iterate(int seed, IntPredicate hasNext,IntUnaryOperator next)
  • seed:s.indeOf(c),找到第一个字符c的索引值
  • hasNext:这是一个预测函数。index->index>=0当index >= 0时才继续查找
  • next:下一个操作数。index -> s.indexOf(c, index + 1),查找下一个索引

版权声明:著作权归作者所有。

相关推荐

JavaScript(ES6)判断字符串是否包含子字符串的方法

ES6 includesES6的字符串新增了includes方法,我们可以用它来判断是否包含子字符串。str.includes(searchString[, position]) searchString:查询的子字符串position:可选,开始搜索的位置,默认为0'Blue Whale'.includes('Blue'); // returns

Python:字符串和datetime的转换

Python的字符串和时间的转换可以分别使用strptime和strftime。strptime(string parse time)datetime.strptime(date_string, format),根据format指定的时间格式解析用于表示时间的字符串date_string。>>>from datetime import&nb

Java 9:紧凑字符串(Compact String)

目前Java的String实现是把字符串存放在一个char类型的数组里,char占用两个字节(16位)。但是String作为很常用的类,在很多时候它只包含Latin-1里的字符,这些字符只需要一个字节(8位)存储,所以在这种情况下很容易造成空间的浪费。Java 9引进紧凑字符串来解决这个问题。使用UTF-16字符数组,或者是1字节的数组加上一个编码标识符来存储字符串。如果字符串的内容都是