java采用3种方式判断用户输入的字符串是否为回文

一、描述

回文的定义:"回文数" 就是正读倒读都一样的整数。如奇数个数字:98789, 这个数字正读是98789,倒读也是98789;偶数个数字3223也是回文数。

我们今天将回文数扩展为字母和数字组合回文,如adgu6776ugda也是回文,我们采用三种方式判断这种类型的字符串是否为回文:

1.调用StringBuffer类对象的reverse()方法,将字符串翻转后与之前的字符串比较,如果相等则为回文,反之亦然;

2.采用low和high两个变量分别对应字符串对称位置的index,所有对称位置的字符都相等则为回文,反之亦然;

3.使用一个变量i来表示字符串的下标,找出对称位置的index关系来判断字符串是否为回文。

二、源代码

import java.util.Scanner;
import javax.swing.JOptionPane;

/**
 * 回文描述:正着读过去和倒着读回来的字符串序列相同则为回文,如:1h3gkg3h1是回文
 * @author tong
 *
 */
public class PalindromeIgnoreNonAlphanumeric {
    public static void main(String[] args) {
    	//可以使用javax.swing.JOptionPane类中的showInputDialog()方法提示用户输入字母或者数字串
        String s = JOptionPane.showInputDialog("请输入输入字符串:");
        //调用isPalindromeByBuffer()方法
        String output = s + (isPalindromeByBuffer(s)?"是":"不是")+"回文。";
        JOptionPane.showMessageDialog(null, output);

        s = JOptionPane.showInputDialog("请输入输入字符串:");
        //调用isPalindromeByCharAt()方法
        output = s + (isPalindromeByCharAt(s)?"是":"不是")+"回文。";
        JOptionPane.showMessageDialog(null, output);

        //使用Scanner(System.in)方法提示用户输入字符串
		System.out.println("请输入输入字符串:");
		Scanner in=new Scanner(System.in);
		String strOrigin=in.next();
		//调用isPalindromeByCharAtSingle()方法
		System.out.print(strOrigin + (isPalindromeByCharAtSingle(s)?"是":"不是")+"回文。");

    }

    /**
     * 通过调用StringBuffer的对象的reverse()方法,来判断翻转前后字符串是否相等,确定是否为回文
     * @param s
     * @return
     */
    public static boolean isPalindromeByBuffer(String s) {
        String strOrigin = filterLetterAndDigit(s);
        //将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.isLetterOrDigit(s.charAt(i))) {
            	//调用StringBuffer的append(Char char)方法,将输入的字母或者数字加入其中
                strBuf.append(s.charAt(i));
            }
        }
        //返回String类型,需要将StringBuffer转换为String,需要调用StringBuffer对象的toString()方法
        return strBuf.toString();
    }

}
时间: 2024-10-06 12:43:04

java采用3种方式判断用户输入的字符串是否为回文的相关文章

判断输入的字符串是否是回文数

<?phpfunction yuanyincount($str){ $str_len=strlen($str); $a_count=0; $e_count=0; $i_count=0; $o_count=0; $u_count=0; $other_count=0; //五种原因字母的数组,没写输出 $a_arr=array(); $e_arr=array(); $i_arr=array(); $o_arr=array(); $u_arr=array(); $other_arr=array();

Java小案例——判断用户输入的月份的季节

 要求:  *  根据用户输入的月份来判断该月季节 实现代码: import java.util.Scanner; /** * 要求: * 根据用户输入的月份来判断该月季节 * @author Administration * */ public class JudgeSeason { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个

Java 测试:将用户输入的字符串中的敏感字和谐成星星

|--需求说明 |--实现方式 1.将要和谐的关键字设置为数组: 2.遍历数组,对比用户输入是否包含关键字,如果包含,就替换成星号 |--代码内容 1 import java.util.*; 2 3 /** 4 * @auther::9527 5 * @Description: 6 * @program: 多线程 7 * @create: 2019-08-08 18:45 8 */ 9 public class Exam { 10 public static void main(String[]

Java编程:万年历,根据用户输入的年份,月份,显示日历

public static void main(String[] args) {  Scanner scanner=new Scanner(System.in);  //根据日历类对象的方法,实例化一个当前的日历类对象  Calendar calendar=Calendar.getInstance();  System.out.println("<<<<<<<<<<<<<<<<万年历>>&

【shell】Linux shell 之 判断用户输入的变量是否为数字

本文内容:判断用户输入的参数是否为数字 在shell中如何进行计算? 方式一 [[email protected] scripts]# echo $((1+2)) 3 方式二 [[email protected] scripts]# expr 2 + 3 5 [[email protected] scripts]# 注意:使用方式二的时候,要求必须要有间隔.如果使用的是乘法,号必须进行转义写为 \ [[email protected] scripts]# expr 2 * 3 expr: 语法错

alertDialog创建登陆界面,判断用户输入

alertDialog创建登陆界面,需要获取用户输入的用户名和密码,获取控件对象的时候不能像主布局文件那样获得, 需要在onClickListener中获取,代码如下: 1 public boolean onOptionsItemSelected(MenuItem item) { 2 // TODO Auto-generated method stub 3 switch(item.getItemId()){ 4 case 1: 5 Intent intent = new Intent(); 6

以写代学:python 数据类型之字符串,判断用户输入的id是否符合要求

字符串操作符 比较操作符:字符串大小按ASCLL码值大小进行比较 切片操作符:[].[:].[::] 成员关系操作符:in.not in 脚本:判断用户输入的id是否符合要求 #!/usr/bin/env python import string #定义字符的范围first_id = string.letters + "_"           //确定首字符的范围all_id = string.digits + first_id         //确定其他字符的范围 #请求用户输入

判断用户输入的邮箱地址是否合法 传说中的正则表达式?

判断用户输入的邮箱地址是否合法 - (BOOL) validateEmail: (NSString *) candidate { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", em

43.编写一个程序,判断用户输入的字符是否是数字,若是数字,则输出“a numerical character”

//1.学习到字符输入 //2.判断字符 #include<iostream> using namespace std; int main() { char a; cout<<"please input a charcter: "<<endl; cin>>a; if(a>'0'&&a<'9') { cout<<"it's a numerical character!"<&l