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

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

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {
  public static void main(String[] args) {
    System.out.println(getIndexList("Hello world!",'l'));
System.exit(0); //success } public static List<Integer> getIndexList(String s, char c) { return IntStream.range(0, s.length()) .filter(index -> s.charAt(index) == c) .boxed() .collect(Collectors.toList()); } }

2) IntStream.iterate

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {
  public static void main(String[] args) {
    System.out.println(getIndexList("Hello world!",'l'));
System.exit(0); //success } public static List<Integer> 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()); } }

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {
  public static void main(String[] args) {
    System.out.println(getIndexList("Hello world!",'l'));
System.exit(0); //success } private static List<Integer> 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实现

import java.util.Scanner;
import java.util.regex.MatchResult;
import java.util.stream.Stream;

public class Main {
  public static void main(String[] args) {
        Stream.of("Hello world!")
                .map(Scanner::new) // 将字符串映射为 Scanner 对象
                .flatMap(s -> s.findAll("l")) // 查找所有匹配字符 "l" 的位置
                .map(MatchResult::start) // 获取匹配结果的开始位置
                .forEach(System.out::println); // 打印每个位置索引
    System.exit(0); //success
  }
}

推荐阅读
cjavapy编程之路首页