如何解决如何更改字符串中的数字?
我需要用给定字符串 s
中的 9 的补码替换每个数字示例:我有 $235! -> 我有 $(9-2)(9-3)(9-5)! -> 我有 764 美元!
public static void playPass(String s,int shift) {
s.chars().map(i -> Character.isDigit(i) ? ____________?___________ : i)
.mapToObj(i -> (char) i).forEach(System.out::println);
}
是的,当然,我可以通过使用 for 循环来解决它,但我只是想更多地了解 Streams。
我尝试过的:
-
.map(i -> Character.isDigit(i) ? 9-i : i)
输出:“我有 $ᅲᅱᅯ!”。这是因为char和用整数表示的区别。 -
.map(i -> Character.isDigit(i) ? Character.getNumericValue(9-i) : i)
输出:“我有 $???!”。但在这里我知道 i - 不是一个真正的值,它只是 ASCII 码。 -
.map(i -> Character.isDigit(i) ? Character.getNumericValue(9-Integer.parseInt(String.valueOf(i))) : i)
输出:“我有 $???!”
我想第三次尝试更聪明,但它不起作用(
我需要一些像这样工作的方法(convertDigitCharToInt)(改变字符)
i - char
i = Character.getNumericValue(9-convertDigitCharToInt(i));
这不是作业))我只是在 codewars.com 上练习。于是就有了这样的问题。 [链接]:https://codewars.com/kata/559536379512a64472000053/train/java)
解决方法
你几乎做到了。补码计算为字符 Everyone
与当前字符数字 plus 之间的差值移动 '9'
以获得新字符。
以下代码工作正常:
'0'
测试:
public static void playPass(String s) {
s.chars()
.map(i -> Character.isDigit(i) ? '9' - i + '0' : i)
.mapToObj(i -> (char) i)
.forEach(System.out::print);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。