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

Java8替代字符串中奇数位置的字符总和?

蔚宏大
2023-03-14

我很想知道是否有一种更优雅的方法来尝试找到Java8中字符串中奇数位置的位数之和。

这是我目前的职责

 /**
 * Explode string into char array, get sum of ASCII values at odd positions and divide by 10 to convert
 * to the integer value from that character
 * @param ccNumber string
 * @return int sum
 */
int calculateSumOfOddDigits(final String ccNumber) {
    final char[] digits = ccNumber.toCharArray();
    return (digits[0] + digits[2] + digits[4] + digits[6] + digits[8] + digits[10] + digits[12] + digits[14]) / 10;
}

仍然不熟悉Streams和Java8,并认为也许你可以这样做:

 ccNumber.chars().mapToObj(x -> (char) x {
        ..add odd position digits

    })

欢迎任何建议。

共有3个答案

壤驷乐邦
2023-03-14
Instream.range(0, str.length())
    .filter(i -> i % 2 == 0)
    .map(i -> str.charAt(i))
    .sum();
印宏阔
2023-03-14

问题是:如果您想对索引进行筛选,那么转换为字符流是没有用的,因为您会丢失索引信息。

但是,您可以将索引视为流,并使用。map()将其转换为char值。类似这样的事情:在Java8中,有没有一种简洁的方法可以使用索引迭代流?

IntStream.range(0, ccNumber.length())
  .filter(i -> i % 2 == 0)
  .map(i -> ccNumber.charAt(i))
  .collect(Collectors.sum());

不确定这是否有效,但你明白了。

还有:这远不如简单的for循环高效,所以我不会真的像这样费心去做。

窦夜洛
2023-03-14

像这样的东西怎么样:

String str = "01234";
Integer sum = IntStream.range(0, str.length())
                       .filter(i -> i % 2 == 0)
                       .map(str::charAt)
                       .sum();
System.out.println(sum);
 类似资料:
  • 我正在努力解决一个关于正则表达式的小问题。 我想用另一个长度相同但字符不同的子字符串替换特定字符的所有奇数长度子字符串。指定字符的所有偶数序列应保持不变。 一个字符串包含字母a、b和y,y的所有奇数长度序列都应替换为z: 另一个可能的例子是: 变成 使用正则表达式匹配所有奇数长度的序列没有问题。 不幸的是,我不知道如何将这些匹配的长度信息合并到替换字符串中。我知道我必须以某种方式使用反向引用/捕获

  • 问题内容: 下面是我的表 当我执行 我的位置是1。 我要实现的是找到整数的第一个位置,这样我将获得以下输出。 任何想法我怎么能做到这一点? 问题答案: 在xdazz答案的帮助下,我做了一些更改,最后得到了答案… 演示版

  • 问题内容: 我的字符串看起来像这样:“您可以在[开始日期+ 30]之前使用促销。” 我需要将占位符替换为实际日期- 这是销售的开始日期加上30天(或其他任何数字)。也可以单独显示而无需添加数字。同样,占位符内的所有多余空格都应被忽略,并且不要使替换失败。 用Java做到这一点的最佳方法是什么?我正在考虑用于查找占位符的正则表达式,但不确定如何执行解析部分。如果只是[开始日期],我将使用该方法,但由

  • 问题内容: 我正在用SQL创建一个临时过程,因为我有一个用markdown编写的表的值,因此该表在Web浏览器中显示为HTML (markdown到HTML转换) 。 该列的字符串当前如下所示: 我目前正在使用粗体和斜体文本。这意味着 (以粗体显示的情况下), 我需要更换奇N次的格局与乃至倍。 我看到了replace(),但是它在字符串的所有模式上执行替换。 那么,如何仅当它是奇数或偶数时才替换子

  • 本文向大家介绍替换Java字符串中的子字符串,包括了替换Java字符串中的子字符串的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的字符串。 我们想将子字符串“ Dead”替换为“ Alive”。为此,让我们使用以下逻辑。在这里,我们使用了while循环,并在其中找到了要替换的子字符串的索引。这样,我们一个接一个地替换了整个子字符串。 以下是替换子字符串的完整示例。 示例 输出结果

  • 问题内容: 我有一个字符串,我想用一个星号替换任何不是标准字符或数字的字符,例如(az或0-9)。例如,“ h ^&ell`。,| ow] {+ orld”被替换为“ h * ell * o * w * orld”。请注意,多个字符(例如“ ^&”)将替换为一个星号。我将如何去做呢? 问题答案: 正则表达式可以解救! 例: