Java中如何将char字符push存入String类型的Stack栈中?
错误原因
- 类型转换不合法:
char是Java基本数据类型,String是引用类型,二者没有继承关系,无法通过(String)强制类型转换实现互转,属于语法层面的报错。 - 分支判断逻辑错误:你写的
SPECIAL_CHARACTER.contains(line)是判断整个输入字符串是否被特殊字符集合包含,完全不符合「判断当前遍历位置的单个字符是否为特殊字符」的需求,该分支永远不会触发。
修复方案
修正后的代码示例
char currentChar = line.charAt(i); // 先判断当前单个字符是否属于特殊字符集合 else if (SPECIAL_CHARACTER.indexOf(currentChar) != -1) { // 合法将char转为String后压栈 operators.push(String.valueOf(currentChar)); }
补充说明
常用的char转String的合法方式有三种:
- 用
String.valueOf(char c):性能最优、语义最清晰,是最推荐的写法 - 用
Character.toString(char c):内部封装了String.valueOf,效果和前者完全一致 - 用
"" + c:通过字符串拼接实现转换,写法最简单,但会生成临时字符串对象,性能略差
如果业务逻辑允许修改栈的定义,你也可以直接将栈的泛型改为Character,就不需要做类型转换:
// 直接声明存储Character类型的栈 Stack<Character> operators = new Stack<>(); // 压栈时直接传入char类型即可,会自动装箱为Character operators.push(currentChar);
内容的提问来源于stack exchange,提问作者Paige
相关产品推荐
相关产品推荐

