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

StringTokenizer类型不兼容错误:Object无法转换为String求助

解决StringTokenizer类型不兼容(Object转String)问题

你遇到的错误核心原因很明确:StringTokenizer的nextElement()方法返回的是**Object类型**,而你试图直接把它赋值给String类型的变量,Java不支持这种隐式的类型转换,所以编译器抛出了"incompatible types"错误。

两种解决方案


方案1:使用nextToken()代替nextElement()(推荐)

StringTokenizer专门提供了nextToken()方法,它直接返回String类型的结果,完全匹配你的变量类型需求,这也是处理字符串拆分的标准用法:

void stringTokenize() {
    StringTokenizer st1 = new StringTokenizer(name_dob, ",");
    name = st1.nextToken(); // 替换nextElement()为nextToken()
    dob = st1.nextToken();
    
    StringTokenizer st2 = new StringTokenizer(dob, "/");
    dd = st2.nextToken();
    mm = st2.nextToken();
    yyyy = st2.nextToken();
}

方案2:显式强制类型转换(不推荐)

如果你一定要使用nextElement(),可以通过强制类型转换把Object转成String,但这种写法冗余且没必要:

name = (String) st1.nextElement();

额外修复:输入流的换行符问题

你的代码还有一个隐藏bug:当你用sc.nextInt()读取n之后,输入流中会残留一个换行符,接下来的sc.nextLine()会直接读取这个空字符串,导致第一个Customer对象的name_dob为空,运行时会抛出NoSuchElementException。

解决方法是在n = sc.nextInt();之后添加一行sc.nextLine();来消费掉换行符:

System.out.println("Enter the number of data");
n = sc.nextInt();
sc.nextLine(); // 新增:消费掉nextInt()留下的换行符
Customer[] obj = new Customer[n];

完整修正后的代码

import java.util.StringTokenizer;
import java.util.Scanner;

class Customer {
    String name_dob, name, dob, dd, mm, yyyy;

    void stringTokenize() {
        StringTokenizer st1 = new StringTokenizer(name_dob, ",");
        name = st1.nextToken();
        dob = st1.nextToken();

        StringTokenizer st2 = new StringTokenizer(dob, "/");
        dd = st2.nextToken();
        mm = st2.nextToken();
        yyyy = st2.nextToken();
    }

    void display() {
        System.out.println(name + "," + dd + "," + mm + "," + yyyy);
    }
}

public class Main {
    public static void main(String[] args) {
        int i, n;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the number of data");
        n = sc.nextInt();
        sc.nextLine(); // 修复换行符问题
        Customer[] obj = new Customer[n];

        for (i = 0; i < n; i++) {
            obj[i] = new Customer();
            System.out.println("Enter the data");
            obj[i].name_dob = sc.nextLine();
            obj[i].stringTokenize();
        }

        System.out.println("After tokenizing........");
        for (i = 0; i < n; i++) {
            System.out.println("The data is");
            obj[i].display();
        }
        sc.close(); // 建议关闭Scanner
    }
}

内容的提问来源于stack exchange,提问作者user9375916

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:09:15