java - 如何更改字符串中的数字?
问题描述
我需要将每个数字替换为给定字符串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 )
解决方案
你几乎做到了。补码计算为字符'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);
}
测试:
playPass("I have $235"); // I have $764
推荐阅读
- javascript - 是否有任何命令行浏览器可以在 DOM 上执行 javascript 并在该 DOM(交互式控制台)上执行 javascript?
- azure - 如何将 azure 自定义 dns 分配给公共 ip
- google-chrome - “调试连接已关闭:渲染进程已消失”,尝试从 cdn 下载 7gb 时
- scala - Scala - 仅当内部字段相等时才对两个对象执行操作
- ruby-on-rails - 用于茉莉花测试的 PhantomJS 的 Node.js 无头浏览器替代品
- c# - 是否有更快的方法来使用 Selenium C# 填充输入表单
- cron - cron 作业错误:“找不到 sqoop 命令”
- javascript - .attr() 或 .prop() 或 replaceWith 不影响 iOS 中的 href?
- oracle - Oracle 确定性要求和特性
- c# - 在实体框架中使用关联表创建一对多