Java中字符串长度初始化数组后输出异常问题求助
问题修复与优化
核心问题分析
- 数组打印错误:Java中直接输出数组时,默认返回数组的类型标识和哈希值(如
[Ljava.lang.String;@3b9a45b3),而非实际内容。需要手动将数组元素拼接成字符串输出。 - toLowerCase()未生效:
String是不可变对象,initial_sent.toLowerCase()不会修改原字符串,必须把返回值重新赋值给原变量,否则大写字母会被判定为非字母字符,返回0。
修复后的代码
import java.util.Scanner; public class Cypher { static Scanner obj = new Scanner(System.in); public static void main(String[] args) { System.out.println("请输入要转换的句子:"); String initialSent = obj.next(); // 接收toLowerCase()返回值,将字符串转为小写 initialSent = initialSent.toLowerCase(); String[] charArray = new String[initialSent.length()]; for(int i = 0; i < initialSent.length(); i++){ char charSingle = initialSent.charAt(i); switch(charSingle){ case 'a': charArray[i] = "1"; break; case 'b': charArray[i] = "2"; break; case 'c': charArray[i] = "3"; break; case 'd': charArray[i] = "4"; break; case 'e': charArray[i] = "5"; break; case 'f': charArray[i] = "6"; break; case 'g': charArray[i] = "7"; break; case 'h': charArray[i] = "8"; break; case 'i': charArray[i] = "9"; break; case 'j': charArray[i] = "10"; break; case 'k': charArray[i] = "11"; break; case 'l': charArray[i] = "12"; break; case 'm': charArray[i] = "13"; break; case 'n': charArray[i] = "14"; break; case 'o': charArray[i] = "15"; break; case 'p': charArray[i] = "16"; break; case 'q': charArray[i] = "17"; break; case 'r': charArray[i] = "18"; break; case 's': charArray[i] = "19"; break; case 't': charArray[i] = "20"; break; case 'u': charArray[i] = "21"; break; case 'v': charArray[i] = "22"; break; case 'w': charArray[i] = "23"; break; case 'x': charArray[i] = "24"; break; case 'y': charArray[i] = "25"; break; case 'z': charArray[i] = "26"; break; default: charArray[i] = "0"; break; } } // 用String.join将数组元素拼接成连续字符串输出 System.out.println(String.join("", charArray)); obj.close(); } }
代码优化方案
原代码的switch-case过于冗长,可利用ASCII码特性简化逻辑:小写字母a的ASCII值为97,任意小写字母c对应的数字为c - 'a' + 1,无需逐个匹配:
import java.util.Scanner; public class Cypher { static Scanner obj = new Scanner(System.in); public static void main(String[] args) { System.out.println("请输入要转换的句子:"); // 链式调用toLowerCase()简化代码 String initialSent = obj.next().toLowerCase(); // 用StringBuilder拼接结果,效率更高 StringBuilder result = new StringBuilder(); for(int i = 0; i < initialSent.length(); i++){ char charSingle = initialSent.charAt(i); if(charSingle >= 'a' && charSingle <= 'z'){ // 计算对应数字并追加到结果中 result.append(charSingle - 'a' + 1); } else { result.append("0"); } } System.out.println(result.toString()); obj.close(); } }
内容的提问来源于stack exchange,提问作者Vlad Graur
相关产品推荐
相关产品推荐

