当前位置: 首页 > 知识库问答 >
问题:

如何让使用递归的回文程序在java中忽略字符串所有地方的特殊字符?

聂风史
2023-03-14

我的回文程序有一点逻辑错误,当我在字符串的前面或后面插入特殊字符时,我得到一个指示,表明该字符串不是回文。我正在编写回文,以便在考虑字符串时忽略所有特殊字符。例如,@bob将被认为不是回文,而b@ob将被认为是回文。我该如何编辑我的代码,使特殊字符被忽略,而不管位置在哪里?所有这些都是通过递归完成的。

'''

import java.util.Scanner;

公共类递归练习{

//the recursive function that checks to see whether the 
//string is a palindrone or not
public static boolean checkPalindrome(String str, int firstChar, int lastChar) {
    //if only one character exists
    if (firstChar == lastChar) 
        return true;
    
    //checks to see if the first and last characters match
    if ((str.charAt(firstChar)) != (str.charAt(lastChar))) 
        
        return false;
    
    //checks to see if it has characters
    if (!isChar(str))
        return true;
    
    
    //checks the middle strings with multiple characters
    //on whether or not they are a palindrome with recursive method
    if (firstChar < lastChar + 1)
        return checkPalindrome(str, firstChar + 1, lastChar - 1 );
                return true;
    
}
   //method that actually determines what a palindrome is
public static boolean isAPalindrome(String str) {
    
    int n = str.length();
    //if string is not 0 or 1 then it's a palindrome
    if(n == 0 || n == 1) 
        return false;
    return checkPalindrome(str, 0, n - 1);
    
}

//method that checks for characters
public static boolean isChar(String str) {
    
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        if (!Character.isLetter(c) && !Character.isDigit(c))
            return false;
    }
    return true;
}

//tests out recursive methods
public static void main(String args[]) {
    
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter a string to see if it's a palindrome:");
    
    String str = scanner.nextLine(); //input from the user
    
    
    //checks to see if it's a palindrome and puts them all
    //to be lower case to ignore the case issue
    if(isAPalindrome(str.toLowerCase()))
        System.out.println(str+" is a palindrome");
    
    else
        System.out.println(str+" is not a palindrome");
    
    scanner.close();
}

}

'''

共有1个答案

谷梁迪
2023-03-14

这一个对我来说太糟糕了!!我现在正在学校讨论这个问题,我正在网上寻求帮助。没有运气!!我对检查一个单词是否为回文没有任何问题,但当谈到句子时,我很纠结。因此,我必须找到一种方法来消除字符串中的空格,同时保持原始字符串的完整性。我尝试了很多方法,但这是它对我有效的唯一方法,并通过了电子书的所有测试。希望这有帮助!!!

import java.util.Scanner;

public class LabProgram {
    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);
        String userText;
        String backText = "";
        String userTextNoSpace = "";
        int i;

        userText = scnr.nextLine();

        if (userText.contains(" ")) {
            userTextNoSpace = userText.replace(" ", "");
            for (i = userTextNoSpace.length() - 1; i >= 0; --i) {
                backText += userTextNoSpace.charAt(i);
            }
        } else {
            for (i = userText.length() - 1; i >= 0; --i) {
                backText += userText.charAt(i);
            }
        }
        if (backText.equalsIgnoreCase(userTextNoSpace) || backText.equalsIgnoreCase(userText)) {
            System.out.println( userText + " is a palindrome");
        } else {
            System.out.println(userText + " is not a palindrome");
        }

    }
}
 类似资料:
  • 我使用java通过Tesseract OCR从图像中提取了文本。但输出由一些特殊字符组成,因为图像包含一些符号。 我想忽略所有特殊字符,只显示文本。我有办法做到吗?

  • 我有一个包含以下列的表: 然后,我手动将更新sql编写为 现在,这个解决方案对我来说并不现实。我查看了以下与Regex相关的链接和它周围的其他链接。 更新和替换字符串的一部分 https://www.codeproject.com/questions/456246/replace-special-characters-in-sql 我如何编写能够处理所有这些特殊字符的更新sql?

  • 我有下一个字符串: 我想替换所有出现的,问题是当有特殊字符(例如: 可以由任何< code >字符串替换。 有什么办法可以解决这个问题吗?

  • 使用Umbraco v6,检查搜索(不是完整的Lucene查询)。这是一个拉丁/南美洲网站。我问过我的同事,他们如何在搜索/URL中键入标题(字母上的重音符号),他们都说他们没有,他们只使用“常规”字符(a-Z,a-Z)。 我知道在传递到Examine时如何从字符串中去掉特殊字符,但我需要另一种方法,如Examine从属性中删除特殊字符以匹配查询。我有许多“节点”的名称中有标题(这是我正在搜索的属

  • 问题内容: 我面临网址问题,我希望能够转换标题,该标题可以包含任何内容,并去除所有特殊字符,因此它们仅包含字母和数字,当然我想用连字符替换空格。 怎么做?我听说过很多关于正则表达式(regex)的使用… 问题答案: 这应该可以满足您的需求: 用法: 将输出: 编辑: 嘿,只是一个简单的问题,如何防止多个连字符彼此相邻?并将它们替换为1?

  • 问题内容: import java.util.Scanner; import java.util.regex.*; public class io{ public static void main(String args[]){ Scanner scan = new Scanner(System.in); String c; if((c=scan.nextLine())!=null) { Patt