You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();
    }
}

错误原因分析

  1. 类型不匹配:sc.nextLine().split(" ")返回String[]类型(按空格分割后的字符串数组),但str[i]是String类型,直接赋值导致类型转换错误。输入是每行一个字符串,不需要分割。

  2. 输入来源混淆:原代码用args[0]获取n,但args是程序运行时的命令行参数,而你是通过标准输入输入n,这会导致args[0]为空,触发NumberFormatException(程序直接崩溃,所以无输出)。

  3. 最长字符串统计逻辑错误:

    • longest = temp会让longest指向空数组,丢失之前的记录;
    • 遇到长度相等的字符串时,k未递增,导致覆盖已有元素;
    • 初始化逻辑混乱,longest[0] = str[0]但k初始为0,后续循环无法正确遍历。
  4. 换行符残留问题:如果用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:23:55