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

Java实现带空格字符串回文检测的代码问题求助

Java带空格字符串回文检测解决方案

问题根源

现有代码直接将包含空格的完整字符串进行反转和全等比对,空格会作为普通字符参与判定,导致nurses run、a b a这类带空格的回文短语被误判为非回文。

实现思路

不需要对原始输入的空格做删除再还原操作,只需要拆分判定和输出的数据源即可:

  • 保留完整的原始输入字符串,用于最终输出,天然保留所有空格格式
  • 额外生成一份移除所有空格的纯文本字符串,仅用于回文判定

修改后完整代码

import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    String original = scnr.nextLine();
    // 生成移除所有空格的纯文本,仅用于回文判定
    String cleanStr = original.replace(" ", "");
    String reverseClean = "";

    int length = cleanStr.length();
    for (int i = length - 1; i >= 0; i--){
      reverseClean = reverseClean + cleanStr.charAt(i);
    }

    if (cleanStr.equals(reverseClean)){
      System.out.println("palindrome: " + original);
    }
    else{
      System.out.println("not a palindrome: " + original);
    }
   }
}

优化建议(可选)

如果需要同时忽略大小写、提升长字符串判定效率,可以改用双指针方案,不需要生成额外的反转字符串:

import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    String original = scnr.nextLine();
    // 加toLowerCase实现忽略大小写判定
    String cleanStr = original.replace(" ", "").toLowerCase();
    boolean isPalindrome = true;
    
    int left = 0;
    int right = cleanStr.length() - 1;
    while (left < right) {
        if (cleanStr.charAt(left) != cleanStr.charAt(right)) {
            isPalindrome = false;
            break;
        }
        left++;
        right--;
    }

    if (isPalindrome){
      System.out.println("palindrome: " + original);
    }
    else{
      System.out.println("not a palindrome: " + original);
    }
   }
}

补充说明

如果需要忽略的不止普通空格,还包括制表符、换行符等所有空白字符,可以把replace(" ", "")替换为replaceAll("\\s+", "")即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:06:03