java正则表达式查找第一个和最后一个字符

java正则表达式查找第一个和最后一个字符,java,regex,recursion,Java,Regex,Recursion,我正在编写一个程序,以递归方式确定字符串是否为回文。我已经决定尝试使用正则表达式,但是我在理解语法方面有点困难。我需要做的是比较第一个字符和最后一个字符,看看它们是否相同。我该怎么做呢 谢谢 编辑:我发现这很有帮助:如果您想在这里递归工作,实际上没有必要使用正则表达式,如果您想测试一般的回文(如果可能的话),也没有必要使用正则表达式。您可以尝试以下方法: public static boolean isPalindrome(String s) { if (s.length() <

我正在编写一个程序,以递归方式确定字符串是否为回文。我已经决定尝试使用正则表达式,但是我在理解语法方面有点困难。我需要做的是比较第一个字符和最后一个字符,看看它们是否相同。我该怎么做呢

谢谢


编辑:我发现这很有帮助:

如果您想在这里递归工作,实际上没有必要使用正则表达式,如果您想测试一般的回文(如果可能的话),也没有必要使用正则表达式。您可以尝试以下方法:

public static boolean isPalindrome(String s) {
    if (s.length() < 2) return true;
    return s.charAt(0) == s.charAt(s.length() - 1) && isPalindrome(s.substring(1, s.length() - 1));
}
public静态布尔值isAlindrome(字符串s){
如果(s.length()<2)返回true;
返回s.charAt(0)=s.charAt(s.length()-1)和&isAlindrome(s.substring(1,s.length()-1));
}

是,您可以使用正则表达式确定第一个和最后一个字符是否相同:

str.matches("(.).*\\1")
这使用“反向引用”来引用“组1”,该组捕获第一个字符

例如:

"aba".matches("(.).*\\1") // true
"abc".matches("(.).*\\1") // false
然后可以递归删除第一个和最后一个字符,然后再次检查:

public static boolean isPalindrome(String str) {
    return str.length() < 2 || 
        (str.matches("(.).*\\1") && isPalindrome(str.substring(1, str.length() - 1)));
}
公共静态布尔值isAlindrome(字符串str){
返回str.length()
(str.matches((.).\\1)和&isAlindrome(str.substring(1,str.length()-1));
}

与其让我们编写代码,不如先编写并测试代码,然后在遇到问题时提问。好吗?在问这类问题之前,你应该先看一下教程:我相信用正则表达式测试回文是不可能的。正则表达式可以非常优雅地用来解决许多问题。然而,这不是其中之一。通过对String.charAt()进行两次调用的for循环,你可以更轻松、更优雅地解决这个问题。@stark我不是在问代码,我只是在问理论,也就是说,可能吗?我已经递归地写过了,但我只是想看看是否可能使用
regex
编写它。哦,我明白了,我的印象是您希望将正则表达式与递归结合使用。根据你文章中一条评论中的链接,使用正则表达式测试回文是不可能的(或者至少是非常困难的)。