如何在Java中批量将字符串中的字母替换为对应数字?
问题解决:字母转对应数字的字符串替换
你的代码问题分析
- 每次循环都基于原始字符串
test执行替换操作,没有将上一次替换的结果传递给下一次循环,最终只有最后一次替换会生效 String.replace()的第二个参数如果传入int类型,会被解析为对应Unicode编码的字符,而非数字字符串。比如传入0时,实际会替换为空字符(Unicode值0),而不是字符串"0"
修正后的循环replace方案
String test = "FF432423FA112"; String[] letters = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; String newStr = test; // 初始化newStr为原始字符串 for (int i=0; i<letters.length; i++) { newStr = newStr.replace(letters[i], String.valueOf(i)); // 基于更新后的newStr继续替换,并将int转为字符串 } System.out.println(newStr); // 输出:5543242350112
更高效的字符数组方案
由于String是不可变对象,循环调用replace()会创建多个中间字符串,效率偏低。直接操作字符数组是更优的选择:
String test = "FF432423FA112"; char[] chars = test.toCharArray(); for (int i = 0; i < chars.length; i++) { char c = chars[i]; if (c >= 'A' && c <= 'Z') { // 计算对应数字:A(ASCII码65)对应0,通过c - 'A'得到偏移量,再转为数字字符 chars[i] = (char) ('0' + (c - 'A')); } } String newStr = new String(chars); System.out.println(newStr); // 输出:5543242350112
内容的提问来源于stack exchange,提问作者user12497632
相关产品推荐
相关产品推荐

