Java 如何忽略大小写并考虑字母数字字符

Java 如何忽略大小写并考虑字母数字字符,java,Java,我正在尝试检查有效的字符串回文。但是,我设置它的方式只有在这些行中没有任何特殊字符(如“,”或“:”或类型)时才起作用 也就是说,当我有“nitin”或“nitin nitin”这个词的时候,这个词就起作用了,但当我有“nitin,nitin”或“一个人,一个计划,一条运河:巴拿马”的时候就不起作用了 我做错什么了吗 class Solution { public boolean isPalindrome(String s) { // ex: string = "nit

我正在尝试检查有效的字符串回文。但是,我设置它的方式只有在这些行中没有任何特殊字符(如“,”或“:”或类型)时才起作用

也就是说,当我有“nitin”或“nitin nitin”这个词的时候,这个词就起作用了,但当我有“nitin,nitin”或“一个人,一个计划,一条运河:巴拿马”的时候就不起作用了

我做错什么了吗

class Solution {
    public boolean isPalindrome(String s) {

        // ex: string = "nitin"

        String newS = s.toUpperCase();

        int start = 0;
        int end = s.length() - 1;

        boolean isPalindrome = true;

        while(start < end)
        {
            if(newS.charAt(start) != newS.charAt(end))
            {
                isPalindrome = false;
                break;
            }

            start++;
            end--;
        }

        if(isPalindrome)
        {
            return true;
        }
        else{
            return false;
        }

    }
}
类解决方案{
公共布尔值isAlindrome(字符串s){
//例如:string=“nitin”
字符串newS=s.toUpperCase();
int start=0;
int end=s.length()-1;
布尔值isAlindrome=true;
while(开始<结束)
{
if(newS.charAt(开始)!=newS.charAt(结束))
{
isAlindrome=false;
打破
}
启动++;
结束--;
}
if(isPalindrome)
{
返回true;
}
否则{
返回false;
}
}
}

在检查字符串是否为回文之前,可以从字符串中删除所有非字母数字字符

例如:

public boolean isPalindrome(String s) {

    String alphanumeric = s.replace(',', '');
    // ...
这将把
nitin,nitin
变成
nitin-nitin

但是,一次只能替换一个字符。 您应该研究该方法,对于该方法,您可以使用正则表达式来匹配所有非字母数字


匹配非字母数字的正则表达式如下所示已编辑

public class Main {
public static boolean isPalindrome(String s) {

    // ex: string = "nitin"

    String newS = s.toLowerCase();
    newS = newS.replaceAll("[^a-zA-Z0-9]", "");
    if (newS.isEmpty()) {
        return false;
    }

    int start = 0;
    int end = newS.length() - 1;

    while (start < end) {
        if (newS.charAt(start) != newS.charAt(end)) {
            return false;
        }

        start++;
        end--;
    }
    return true;
}

public static void main(String[] args) {
    System.out.println(isPalindrome(""));
    System.out.println(isPalindrome("nitin"));
    System.out.println(isPalindrome("123454321"));
    System.out.println(isPalindrome("A man, a plan, a canal: Panama"));
}

您可以按如下方式进行操作:

class Solution {    
    public static void main(String[] args) {
        System.out.println(isPalindrome("Nitin"));
        System.out.println(isPalindrome("Ni   tin"));
        System.out.println(isPalindrome("N,it + in"));
        System.out.println(isPalindrome("Ni2ti3n"));        
        System.out.println(isPalindrome("123454321"));
    }
    public static boolean isPalindrome(String s) {
        // Remove all non-alphabet and non-digit characters and change the case of the
        // resulting String to upper case
        String newS = s.replaceAll("[^a-zA-Z0-9]", "").toUpperCase();
        int start = 0;
        int end = newS.length() - 1;
        while (start < end) {
            if (newS.charAt(start) != newS.charAt(end)) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }
}

“我做错什么了吗?”-是的,你没有忽略非字母字符。这回答了你的问题吗?如果不是字母则跳过:旁注:您可以将最后一个
if/else
替换为just
return isPalindrome
String stripped=s.replaceAll(“\W”,”).toLowerCase()
应该会将您带到一个只剩下字符的地方。如果我采用这种方法,我会遇到字符串索引超出范围的问题:(“int end=s.length()-1”应该是“int end=newS.length()-1”,但是如果我的字符串是“123454321”,会发生什么情况。由于使用了德语SS,因此最好将其转换为小写而不是大写。因此,如果我的字符串为“123454321”,会发生什么情况?回文通常只忽略空格和标点符号。其他所有内容应前后相同。现在看起来不错。
class Solution {    
    public static void main(String[] args) {
        System.out.println(isPalindrome("Nitin"));
        System.out.println(isPalindrome("Ni   tin"));
        System.out.println(isPalindrome("N,it + in"));
        System.out.println(isPalindrome("Ni2ti3n"));        
        System.out.println(isPalindrome("123454321"));
    }
    public static boolean isPalindrome(String s) {
        // Remove all non-alphabet and non-digit characters and change the case of the
        // resulting String to upper case
        String newS = s.replaceAll("[^a-zA-Z0-9]", "").toUpperCase();
        int start = 0;
        int end = newS.length() - 1;
        while (start < end) {
            if (newS.charAt(start) != newS.charAt(end)) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }
}
true
true
true
false
true