A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

各位大神好,要判断一个字符串是否是对称字符串,例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串,用JAVA怎么编写代码啊?

下面是我编写的,个人感觉对,但是当输入不对称的字符串时就调试不出来了,请各位大神不吝赐教,感激不尽!


class TestReverse {
        public static void main(String[] args) {
               
                StringBuffer str1 = new StringBuffer("abc123ab");
                StringBuffer str2 = str1;
                str1.reverse();
               
                if (str1.equals(str2)) {
                        System.out.println("这个字符串是对称的。");
                }
                else
                        System.out.println("这个字符串是不对称的。");
               
        }
}


8 个回复

倒序浏览
代码如下,仅供参考:
import java.util.Scanner;
//需求:判断一个字符串是否是对称字符串,例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
public class Demo2 {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入字符串:");
                while (true) {
                        String s = sc.nextLine();
                        boolean flag = get(s);
                        System.out.println(flag);
                }
        }
        // 以下是判断给定字符串是否为对称字符串。
        // 如果是,则返回true,如果不是,返回false。
        private static boolean get(String s) {
                int x = s.length();          //x为字符串的长度
                char[] arr = s.toCharArray();        //字符串转为字符数组
                //遍历字符数组,索引为0的与索引为x-1的比,1和x-2比,2和x-3比。
                //以此类推,arr[i]与arr[x-1-i]比,只要有一次不相等,就不是对称字符串。                       
                for (int i = 0; i < x; i++) {                       
                        if (arr[i] != arr[x - 1 - i]) {                                                                                                         
                                return false;
                        }
                }
                return true;        //当每一次比较都相等时,那就是对称字符串。
        }
}
回复 使用道具 举报
用一个头指针和一个尾指针就好了。
回复 使用道具 举报
你这样写永远是对称的,原因在于:str1 和 str2 引用的都是同一个可变对象,当你对str1指向的内容翻转之后,str2指向同一个对象,内容也是变化的。
回复 使用道具 举报
你把str2这样写:StringBuffer str2 = new StringBuffer(str1.toString());  就可以了,
回复 使用道具 举报
itheima_casper 发表于 2015-10-18 13:17
你把str2这样写:StringBuffer str2 = new StringBuffer(str1.toString());  就可以了,

额,StringBuffer  和 StringBuilder 没有覆写equals。。。 要先toString
回复 使用道具 举报
maxwell247 发表于 2015-10-18 08:59
用一个头指针和一个尾指针就好了。

额,还不是太明白啊,还要好好学习啊
回复 使用道具 举报
itheima_casper 发表于 2015-10-18 13:17
你把str2这样写:StringBuffer str2 = new StringBuffer(str1.toString());  就可以了,

OK,非常感谢啊
回复 使用道具 举报
public class DuiChen {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个字符串:");
                String s = sc.nextLine();
                sc.close();
                if (isDuiChen(s))
                        System.out.println(s + "是对称的");
                else
                        System.out.println(s + "不是对称的");
                test();

        }

        static boolean isDuiChen(String s) {
                char[] ch = s.toCharArray();
                for (int left = 0, right = s.length() - 1; left < right; left++, right--) {
                        if (ch[left] != ch[right])
                                return false;
                }

                return true;
        }

        static void test() {
                StringBuffer sb1 = new StringBuffer("hh");
                StringBuffer sb2 = new StringBuffer("hh");
                System.out.println(sb1);
                System.out.println(sb2);

                if (sb1.equals(sb2))
                        System.out.println("相等");
                else
                        System.out.println("不等");

        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马