如何获取字符串数组元素的索引?

How to get index of elements of string array?

我在 String[] strArray

中有以下数据

1, 9, 3, 4, 16, 6, 7, 8, 2, 10, 11, 12, 13, 45

我想找到那些包含 3 的元素的索引(例如:3,13)。即我应该有 3=str[2] 和 13=str[12] 只使用 Java 8 features 像流和等等,因为我想在找到它们的索引后,用特定的字符串替换它们,例如 "Test"

您可以获取数组的长度并从 i=0 迭代到 i

或者,您可以使用 Java Stream 方法 Map 来做同样的事情。

str.stream().map(x-> {if(String.valueOf(x).contains(“3”)) return “Test”;}).collect(Collectors.toList());

在这种情况下,您可能希望使用 .toArray 而不是收集为列表。

这是一种方法。使用三元运算符 (?:) 来决定是将当前字符串替换为 Test 还是原始值

String[] vals = { "1", "9", "3", "4", "16", "6", "7", "8",
        "2", "10", "11", "12", "13", "45" };

vals = Arrays.stream(vals)
        .map(str -> str.contains("3") ? "Test" : str)
        .toArray(String[]::new);

System.out.println(Arrays.toString(vals));

打印

[1, 9, Test, 4, 16, 6, 7, 8, 2, 10, 11, 12, Test, 45]

到 return 数组元素的映射到找到的匹配项的索引,您可以这样做。这将处理具有不同索引的重复值。

  • 流式传输数组的索引
  • 过滤索引以获得匹配的值
  • 使用分组依据将索引转换为整数(通过装箱 - 收集器需要)。
  • 然后使用过滤后的索引分配给地图。该值是每个 key 实例所在位置的列表。
String[] vals = { "1", "9", "3", "4", "16", "6", "7", "8",
        "2", "10", "11", "12", "13", "45", "43", "3", "13" };

Map<String, List<Integer>> results = IntStream.range(0,vals.length)
        .filter(i -> vals[i].contains("3"))
        .boxed()
        .collect(Collectors.groupingBy(i->vals[i]));
 
results.forEach((k,v)-> System.out.println(k + " -> " + v));

打印

13 -> [12, 16]
3 -> [2, 15]
43 -> [14]

要用地图中其值的索引替换原始数组,请执行以下操作。

for (String key : results.keySet()) {
    for (int i : results.get(key)) {
        vals[i] = i+"";
    }
}