使用数组判断给定字符串是否为回文的问题求助
用String类结合数组判断回文的正确实现
先指出你原代码里的几个核心问题:
- 你的for循环只是打印索引值,完全没生成反转数组
- 用
getBytes()转字节数组存在编码风险(比如UTF-8下多字节字符会乱码),直接转字符数组更靠谱 - 未正确构建反转后的字符串,导致
res变量未定义
下面是修正后的完整代码,完全基于String类和数组实现:
import java.util.Scanner; public class ClassA { void meth1() { Scanner sc = new Scanner(System.in); System.out.println("Enter the string to be checked to see if it's a palindrome."); String s = sc.next(); // 将字符串转为字符数组,直接对应每个字符 char[] originalChars = s.toCharArray(); // 创建和原数组长度一致的反转字符数组 char[] reversedChars = new char[originalChars.length]; // 倒序遍历原数组,把字符存入反转数组 for (int i = 0; i < originalChars.length; i++) { reversedChars[i] = originalChars[originalChars.length - 1 - i]; } // 用反转字符数组构建新字符串 String res = new String(reversedChars); // 比较原字符串和反转后的字符串 if (s.equals(res)) { System.out.println("It is a palindrome"); } else { System.out.println("It is not a palindrome"); } sc.close(); // 记得关闭Scanner资源 } public static void main(String[] args) { new ClassA().meth1(); } }
关键细节说明:
- 替换
getBytes()为toCharArray():字符数组直接映射字符串的每个字符,不会出现编码导致的字节不匹配问题,更适合回文判断场景。 - 正确生成反转数组:通过for循环,原数组的最后一个元素对应反转数组的第一个元素,依次完成倒序赋值。
- 构建反转字符串:利用
String(char[])构造方法,将反转后的字符数组转为字符串,再和原字符串做相等性判断。
如果需要忽略大小写判断(比如把"RacecaR"和"racecar"视为相同),只需把比较语句改成:
if (s.equalsIgnoreCase(res)) {
内容的提问来源于stack exchange,提问作者Pasha Mohammed
相关产品推荐
相关产品推荐

