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
相关产品推荐
相关产品推荐

