用replace方法和java8替换大数组中的一部分字符串

时间:2017-09-13 12:36:06

标签: java-8 java-stream

我有数组String[] values = new String[100],我需要用java8检查10到35之间的所有字符串。因为我不想用if和else来做。

例如:

for(int i = 10; i<=35; i++){
    if (values[i].contains("something")){
      values[i].replace("something", "something else");
    }
}

我怎么能用java8和少量的代码行来做呢?

请帮助我

2 个答案:

答案 0 :(得分:3)

这是一种可能更清洁的替代方法:

    Arrays.asList(values).subList(10, 35+1)
          .replaceAll(s -> s.replace("something", "something else"));

注意:

  • subList需要半开的间隔,因此第二个arg有+1

  • 必须分配或退回String.replace的结果,而不是丢弃,因为它当然无法修改原始字符串

  • 调用String.contains是没有意义的,因为这是以String.indexOf来实现的。 String.replace做的第一件事就是调用String.indexOf并在找不到字符串时纾困。

答案 1 :(得分:2)

我可以想到这一点,但它没有你现有的那么可读或有效:

 IntStream.rangeClosed(10, 35)
            .forEach(ix -> values[ix] = values[ix].replace("something", "something2"));