Java如何将String数组存储的输入正确转换为char数组
问题背景
练习for循环与输入转数组相关操作时,需实现「将用户输入先存入String数组,再转换为存储单个字符的char数组」的逻辑,尝试多种写法均触发报错:
- 编写
in.next().charAt(t)触发不明报错 - 直接赋值
charArr[t] = in.nextLine()时,编译器提示需做类型转换 - 先将输入存入String数组后编写
charArr[t] = string[t],同样提示需要类型转换
原问题代码如下:
public static void main(String[] args) throws IOException { Scanner in = new Scanner(System.in); int range = 0; System.out.print("Please enter the range: "); range = Integer.parseInt(in.nextLine()); String[] string = new String[range]; char[] charArr = new char[range]; System.out.println("Please enter the characters: "); for(int t = 0; t < range; t++){ string[t] = in.nextLine(); //First input to the string array charArr[t] = string[t]; //Attempt to transfer that letter/input } }
报错原因
Java是强类型语言,String是引用类型,char是基本数据类型,二者不存在自动转换规则,不能直接赋值。
当前定义的charArr是元素为单个char的数组,每个下标位置仅能存储1个字符;而in.nextLine()返回值是整行内容对应的String对象,哪怕输入内容只有1个字符,返回值仍然是String类型,直接赋值给char类型的数组元素必然触发类型不匹配错误。
之前使用in.next().charAt(t)报错,是因为charAt()方法需要传入的参数是「当前字符串内部的字符下标」,而非循环计数器t。如果每次仅输入1个单字符,有效字符永远在当前字符串的0号下标位置,当t值大于0时,调用charAt(t)会直接触发字符串下标越界异常。
修正方案
如果需求是每次输入1个单个字符,最终收集range个字符存入char数组,只需要在拿到每行输入的String对象后,调用charAt(0)取字符串首位的字符即可,修正后代码如下:
public static void main(String[] args) throws IOException { Scanner in = new Scanner(System.in); int range = 0; System.out.print("Please enter the range: "); range = Integer.parseInt(in.nextLine()); String[] stringArr = new String[range]; char[] charArr = new char[range]; System.out.println("Please enter the characters: "); for(int t = 0; t < range; t++){ // 加trim()过滤输入前后误输入的空格,避免取到无效空格 stringArr[t] = in.nextLine().trim(); // 取当前输入字符串的首位字符存入char数组 charArr[t] = stringArr[t].charAt(0); } // 可自行添加遍历逻辑验证charArr存储结果 }
额外注意事项
- 如果需求是将所有输入的整行字符串全部拆分为单个字符存入char数组,当前定义的
charArr长度不符合要求:range是输入的字符串个数,不等于所有字符串的总字符长度,需要先统计所有输入字符串的总字符数,再创建对应长度的char数组,通过String.toCharArray()方法拆分每个字符串后逐个填充。 - 当前代码用
Integer.parseInt(in.nextLine())读取整数范围的写法是正确的,不会出现Scanner读取换行符残留导致后续nextLine()读空行的问题,无需调整。 - 原代码中String数组的变量名取为
string,和Java内置类名重名,可读性差,建议调整为stringArr这类见名知意的命名。
内容的提问来源于stack exchange,提问作者BAZ ZINGA
相关产品推荐
相关产品推荐

