当前位置: 首页 > 知识库问答 >
问题:

如何应用每n个元素的操作

暴博远
2023-03-14

给定一个数字字符串,我想在字符串中的每n位数应用一个操作。这可能与java流?

例如,对于字符串“12345”,并对每2个字符应用3的和,结果将是“15375”

public static void main(String[] args) {
    "12345".chars()
           .mapToObj(Character::getNumericValue)
           .mapToInt(c -> c + 3) //should only happen every 2nd character
           .forEach(System.out::print);
}

上面的结果是45678,因为总和应用于所有字符。

共有3个答案

长孙承嗣
2023-03-14

你可以这样做。

  • 使用(i 1)%n以第n个字符开头
String s = "12345";
int n = 2;
IntStream.range(0, s.length())
        .map(i -> (i+1) % n == 0 ? s.charAt(i) - '0' + 3 :
                s.charAt(i) - '0')
        .forEach(System.out::print);

指纹

15375

厉高逸
2023-03-14

您可以使用范围运算符将索引添加到流中:

String myString = "12345";
int n = 2;
        
IntStream
  .range(0, myString.length())
  .mapToObj(i -> Map.entry(i, Character.getNumericValue(myString.charAt(i))))
  .mapToInt(pair -> (pair.getKey() + 1) % n == 0 ? pair.getValue() + 3 : pair.getValue())
  .forEach(System.out::print);
百里弘致
2023-03-14

我相信这就是你要找的:

public static void main(String[] args) {
    String string = "12345";
    String result = IntStream.range(0, string.length())
            .mapToObj(index -> incrementCharAtEvenIndex(string, index, 3))
            .collect(Collectors.joining());

    System.out.println(result);
}
static String incrementCharAtEvenIndex(String string, int index, int increment) {
    int number = Character.getNumericValue(string.charAt(index));
    if ((index + 1) % 2 == 0) {
        number = number + increment;
    }
    return String.valueOf(number);
}

不幸的是,Stream API不是为直接使用索引而构建的,因此您必须使用IntStream来模拟for循环,并使用自定义方法来增加出现在偶数索引中的数字字符(请记住它从0开始)。

 类似资料:
  • 我有一个名为计算的方法,它需要太长时间才能完成。所以我决定将我的信息列表对象部分发送到这个方法。我如何遍历每n个元素?

  • 问题内容: 例如,是否可以选择一组元素中的每个第四个元素? 例如:我有16个元素…我可以写类似的东西。 有一个更好的方法吗? 问题答案: 顾名思义,它允许您使用除常数以外的变量构造算术表达式。您可以执行加法(),减法()和系数乘法(其中是整数,包括正数,负数和零)。 这是重写上面的选择器列表的方法: 有关这些算术表达式如何工作的解释,请参见我对该问题的回答以及规范。 请注意,此答案假设同一父元素内

  • 在我的Java应用程序中,我使用以下流: 列表包含9个字符串,上面的代码只对第一个执行操作,而对另一个执行操作。 如何更改代码为列表中的每个元素触发相同的操作?

  • 我有一个这样的数字列表: 如何以优雅的方式总结每个N(让我们假设2)个元素并将列表转换为: 编辑:我想出了以下解决方案: 它是有效的,但我仍然在寻找一个更易读、更简单的方法。

  • 如果最后没有足够的元素用于n间隔,则忽略此间隔

  • 我希望每次只呈现数组中的三个元素。 每次我将单击em来更改数字。 例如:在屏幕上:123,我点击了在按钮,会出现456和以上。 MyCode: