判断字符串是不是回文

/** 
 * 回文描述:正着读过去和倒着读回来的字符串序列相同则为回文,如:1h3gkg3h1是回文 
 * @author fubin 
 * 
 */

public class huiwen {
	
	public static void main(String[] args) {
		
	String s = "abC123321Cba";
		
	//调用isPalindromeByBuffer()方法  
        String output = s + (isPalindromeByBuffer(s)?"  是":"  不是")+"回文。";
        System.out.println(output);
        
      //调用isPalindromeByCharAt()方法  
        output = s + (isPalindromeByCharAt(s)?"  是":"  不是")+"回文。"; 
        System.out.println(output);
        
	//调用filterLetterAndDigit(String s)方法  过滤字符串
        s = filterLetterAndDigit(s);
      //调用isPalindromeByCharAtSingle()方法  
       output = s + (isPalindromeByCharAtSingle(s)?"  是":"  不是")+"回文。";
       System.out.println(output);
	}
	
	
	/** 
     * 通过调用StringBuffer的对象的reverse()方法,来判断翻转前后字符串是否相等,确定是否为回文 
     * @param s 
     * @return 
     */ 
	public static boolean isPalindromeByBuffer(String strOrigin ) {
		//将strOrigin作为输入参数,构造一个StringBuffer对象  
        StringBuffer strBuf = new StringBuffer(strOrigin); 
        //调用StringBuffer对象自带的reverse()方法进行字符串翻转,最后调用toString()返回一个String类型字符串 
        String strAfterReverse = strBuf.reverse().toString();
        //通过equals()方法判断原来的字符串和翻转后的字符串是否相等,来确定是否为回文
        return strOrigin.equals(strAfterReverse);
	}
	
	/** 
     * 通过字符串中的对称位置字符串是否相同来判断是否为回文,这里用了两个变量low和high来分别对应字符串对称位置的index 
     * @param s 
     * @return 
     */  
	public static boolean isPalindromeByCharAt(String s) {
		//low和high分别对应字符串对称位置的index,以此来判断所有对称位置字符是否相同 
		int low = 0;  
        int high = s.length() - 1;	
        while (low < high) {  
            if (s.charAt(low) != s.charAt(high))  
                return false;  // 不是回文  
            low++;  
            high--;  
        } 
        return true;           // 是回文  
	}
	
	/** 
     * 通过字符串中的对称位置字符串是否相同来判断是否为回文,这里用了一个变量i来对应字符串对称位置的index 
     * @param s 
     * @return 
     */  
    public static boolean isPalindromeByCharAtSingle(String s) {  
        //通过对称下标的关系使用一个变量即可判断所有对称位置字符是否相同  
        for(int i=0;i<s.length()/2;i++){  
            //只有当前一半字符串和后一半字符串对应位置相同,那么才是回文,只有有一个对称位置的字符不同就不是回文  
            if(s.charAt(i)!=s.charAt(s.length()-i-1)){  
                return false;  
            }  
        }  
        return true;     
    } 
}
     /** 
     * 通过调用Character.isLetterOrDigit(Char char)过滤字母或者数字,判断字母或者数字的组合是否为回文 
     * @param s 
     * @return String 
     */
    public static String filterLetterAndDigit(String s) {  
        StringBuffer strBuf = new StringBuffer();  
        for (int i = 0; i < s.length(); i++) {  
        	if (Character.isLetter(s.charAt(i)) || Character.isDigit(s.charAt(i)))
//            if (Character.isLetterOrDigit(s.charAt(i))) 
            {  
                //调用StringBuffer的append(Char char)方法,将字母或者数字加入其中  
                strBuf.append(s.charAt(i));  
            }  
        }  
        //返回String类型,需要将StringBuffer转换为String,需要调用StringBuffer对象的toString()方法  
        return strBuf.toString();  
    }



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strggle_bin

一毛不嫌少,十元不嫌多

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值