一,、描述
回文的定義:"回文數(shù)" 就是正讀倒讀都一樣的整數(shù),。如奇數(shù)個數(shù)字:98789, 這個數(shù)字正讀是98789,倒讀也是98789;偶數(shù)個數(shù)字3223也是回文數(shù),。
我們今天將回文數(shù)擴(kuò)展為字母和數(shù)字組合回文,,如adgu6776ugda也是回文,我們采用三種方式判斷這種類型的字符串是否為回文:
1.調(diào)用StringBuffer類對象的reverse()方法,,將字符串翻轉(zhuǎn)后與之前的字符串比較,,如果相等則為回文,反之亦然,;
2.采用low和high兩個變量分別對應(yīng)字符串對稱位置的index,,所有對稱位置的字符都相等則為回文,反之亦然,;
3.使用一個變量i來表示字符串的下標(biāo),,找出對稱位置的index關(guān)系來判斷字符串是否為回文。
二,、源代碼
import java.util.Scanner; import javax.swing.JOptionPane;
/** * 回文描述:正著讀過去和倒著讀回來的字符串序列相同則為回文,,如:1h3gkg3h1是回文 * @author tong * */ public class PalindromeIgnoreNonAlphanumeric { public static void main(String[] args) { //可以使用javax.swing.JOptionPane類中的showInputDialog()方法提示用戶輸入字母或者數(shù)字串 String s = JOptionPane.showInputDialog("請輸入輸入字符串:"); //調(diào)用isPalindromeByBuffer()方法 String output = s + (isPalindromeByBuffer(s)?"是":"不是")+"回文。"; JOptionPane.showMessageDialog(null, output); s = JOptionPane.showInputDialog("請輸入輸入字符串:"); //調(diào)用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(); //調(diào)用isPalindromeByCharAtSingle()方法 System.out.print(strOrigin + (isPalindromeByCharAtSingle(s)?"是":"不是")+"回文,。");
} /** * 通過調(diào)用StringBuffer的對象的reverse()方法,來判斷翻轉(zhuǎn)前后字符串是否相等,,確定是否為回文 * @param s * @return */ public static boolean isPalindromeByBuffer(String s) { String strOrigin = filterLetterAndDigit(s); //將strOrigin作為輸入?yún)?shù),,構(gòu)造一個StringBuffer對象 StringBuffer strBuf = new StringBuffer(strOrigin); //調(diào)用StringBuffer對象自帶的reverse()方法進(jìn)行字符串翻轉(zhuǎn),,最后調(diào)用toString()返回一個String類型字符串 String strAfterReverse = strBuf.reverse().toString(); //通過equals()方法判斷原來的字符串和翻轉(zhuǎn)后的字符串是否相等,來確定是否為回文 return strOrigin.equals(strAfterReverse); } /** * 通過字符串中的對稱位置字符串是否相同來判斷是否為回文,這里用了兩個變量low和high來分別對應(yīng)字符串對稱位置的index * @param s * @return */ public static boolean isPalindromeByCharAt(String s) { //low和high分別對應(yīng)字符串對稱位置的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來對應(yīng)字符串對稱位置的index * @param s * @return */ public static boolean isPalindromeByCharAtSingle(String s) { //通過對稱下標(biāo)的關(guān)系使用一個變量即可判斷所有對稱位置字符是否相同 for(int i=0;i<s.length()/2;i++){ //只有當(dāng)前一半字符串和后一半字符串對應(yīng)位置相同,,那么才是回文,只有有一個對稱位置的字符不同就不是回文 if(s.charAt(i)!=s.charAt(s.length()-i-1)){ return false; } } return true; } /** * 通過調(diào)用Character.isLetterOrDigit(Char char)過濾字母或者數(shù)字,,判斷字母或者數(shù)字的組合是否為回文 * @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))) { //調(diào)用StringBuffer的append(Char char)方法,將輸入的字母或者數(shù)字加入其中 strBuf.append(s.charAt(i)); } } //返回String類型,,需要將StringBuffer轉(zhuǎn)換為String,需要調(diào)用StringBuffer對象的toString()方法 return strBuf.toString(); } }
本文永久更新鏈接地址:http://www./Linux/2015-03/115013.htm
|