Java报错:char无法转换为string,求错误解析与修复方案
错误原因与修复方案
错误根源
你标注的代码行报错,核心问题是类型不匹配:
- 你声明的
ArrayList<String>只能存储String类型对象 - 但
str.charAt(i)返回的是char基本类型,无法直接存入String类型集合
两种修复方式
方式1:将char转换为String存入
把ar.add(str.charAt(i))改成以下任意一种写法,将char转为String:
ar.add(String.valueOf(str.charAt(i))); // 或者 ar.add("" + str.charAt(i));
同时要同步调整contains和remove的判断逻辑,确保用String类型匹配:
if (ar.contains(String.valueOf(str.charAt(i)))) ar.remove(String.valueOf(str.charAt(i)));
方式2:改用Character类型的ArrayList
更简洁的方案是直接把集合类型改成Character(char的包装类),这样可以直接存储char(自动装箱):
ArrayList<Character> ar = new ArrayList<>();
此时原代码的contains、remove、add操作都能正常工作,无需额外转换。
结合回文判断需求优化
你的核心需求是判断字符串能否重排为回文,逻辑是最终集合剩余元素个数≤1(回文允许最多一个字符出现奇数次)。修复后的完整代码如下:
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); ArrayList<Character> ar = new ArrayList<>(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (ar.contains(c)) { ar.remove((Character) c); // 强制转为包装类,避免按索引删除 } else { ar.add(c); } } // 判断是否能重排为回文 boolean canFormPalindrome = ar.size() <= 1; System.out.println(canFormPalindrome ? "可以重排为回文" : "无法重排为回文"); } }
注意ar.remove((Character) c)是为了避免调用remove(int index)方法,确保删除的是对应字符元素。
内容的提问来源于stack exchange,提问作者Hritikesh S Shendre
相关产品推荐
相关产品推荐

