Java标准输入报错:无法将String[]转为String,输入均为字符串
问题与解决
问题场景
编程作业要求:从标准输入读取数据,先输入整数n表示后续字符串数量,接着输入n个不同长度的字符串,找出并打印所有最长的字符串。
在Eclipse中按回车分隔输入:
- 3
- a2
- b3c
- 7
运行时提示无法将String[]转换为String,替换读取语句为sc.next()或sc.nextLine()后无报错但无输出。
原代码
import java.util.Scanner; public class A2P1 { public static void main(String[] args) { int size = Integer.parseInt(args[0]); String[] str = new String[size]; Scanner sc = new Scanner(System.in); for (int i=0; i < size; i++) { str[i] = sc.nextLine().split(" "); // 报错行 //str[i] = sc.next(); 无报错但无输出 //str[i] = sc.nextLine(); 无报错但无输出 } String[] longest = new String[size]; String[] temp = new String[size]; longest[0] = str[0]; int numToBeat = str[0].length(); int k = 0; for (int i=0; i < size; i++) { if (str[i].length() > numToBeat) { numToBeat = str[i].length(); k = 0; longest = temp; longest[k] = str[i]; k++; } else if (str[i].length() == numToBeat) { longest[k] = str[i]; } } System.out.println("The longest input strings are:"); for (int i=0; i < k; i++) { System.out.println(longest[i]); } sc.close(); } }
错误原因分析
类型不匹配:
sc.nextLine().split(" ")返回String[]类型(按空格分割后的字符串数组),但str[i]是String类型,直接赋值导致类型转换错误。输入是每行一个字符串,不需要分割。输入来源混淆:原代码用
args[0]获取n,但args是程序运行时的命令行参数,而你是通过标准输入输入n,这会导致args[0]为空,触发NumberFormatException(程序直接崩溃,所以无输出)。最长字符串统计逻辑错误:
longest = temp会让longest指向空数组,丢失之前的记录;- 遇到长度相等的字符串时,
k未递增,导致覆盖已有元素; - 初始化逻辑混乱,
longest[0] = str[0]但k初始为0,后续循环无法正确遍历。
换行符残留问题:如果用
sc.nextInt()读取n,后续sc.nextLine()会读取缓冲区中残留的换行符,导致读取到空字符串。
修正后的代码
import java.util.Scanner; public class A2P1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 读取整数n,同时清空nextInt后的换行符 int size = sc.nextInt(); sc.nextLine(); String[] str = new String[size]; // 读取n个字符串 for (int i = 0; i < size; i++) { str[i] = sc.nextLine(); } // 先找出最长字符串的长度 int maxLength = 0; for (String s : str) { if (s.length() > maxLength) { maxLength = s.length(); } } // 输出所有最长的字符串 System.out.println("The longest input strings are:"); for (String s : str) { if (s.length() == maxLength) { System.out.println(s); } } sc.close(); } }
运行说明
在Eclipse中运行时,直接在控制台按顺序输入:
3 a2 b3c 7
程序会输出:
The longest input strings are: b3c
内容的提问来源于stack exchange,提问作者Gynzie
相关产品推荐
相关产品推荐

