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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lipanquan 中级黑马   /  2014-1-3 19:31  /  1896 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;

import java.util.Scanner;

public class Test3 {
        /**第三题
         * 判断一个字符串是否是对称字符串
         *        例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
         * @param args
         */
        //用于跳出循环的标志
        private static boolean isrun=true;
        //
        private static boolean issymmetry;
        //主函数
        public static void main(String[] args) {
                //循环接收并处理输入的字符
                while(isrun)
                {
                        issymmetry = true;
                        //初始化接收键盘输入的scanner变量
                        Scanner userInput = new Scanner(System.in);
                        String input = userInput.nextLine();
                        int inputLength = (int)(input.length()/2);
                        System.out.println("inputLength:" + inputLength);
                        int i = 0;
                        while(inputLength != i)
                        {
                                System.out.println("i:" + i);
                                if(input.substring(i, (i + 1)).equals(input.substring((input.length() - i-1), (input.length() - i))))
                                {
                                        System.out.println("第" + (i+1) + "个字符相对称于第" + (input.length()-i) + "个");
                                }
                                else
                                {
                                        issymmetry = false;
                                        System.out.println(input + "不是对称字符串");
                                        break;
                                }
                                i ++;
                        }
                        if(issymmetry)
                        {
                                System.out.println(input + "是对称字符串");
                        }
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

4 个回复

倒序浏览
可以将字符串通过subString平分为两个子字符串,(单双处理)一个子字符串反转后epuals另一个子字符串
回复 使用道具 举报
直接用StringBuilder的字符串反转方法很简单
  1. public class Test3 {

  2.         private static Scanner sc;
  3.         public static void main(String[] args) {
  4.                
  5.                 reverseString();
  6.         }
  7.        
  8.         public static void reverseString() {
  9.                 System.out.println("请输入,按enter线束:");
  10.                 //接收键盘输入
  11.                 sc = new Scanner(System.in);
  12.                 String input = sc.next();
  13.                 //将String转为StringBuilder
  14.                 StringBuilder sb = new StringBuilder(input);
  15.                 //使用StringBuilder的字符串反转方法reverse()
  16.                 StringBuilder sv = sb.reverse();
  17.                 //比较反转前后是否一样,一样的就是对称的,反之不对称
  18.                 if (input.equals(sv))
  19.                 {
  20.                         System.out.println("是对称的");
  21.                 }               
  22.                 else
  23.                 {
  24.                         System.out.println("不是对称的");
  25.                 }
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
楼主想复杂了,如果仅仅为了判断一个字符串是不是对称字符串,直接用下面的代码就好了,很简单:
  1. public class Demo {
  2.         public static void main(String[] args){
  3.                 String s="abcba";
  4.                 System.out.println(fun(s));     //结果为true,是对称字符串
  5.                 System.out.println(fun("asdf")); //结果为false,不是对称字符串
  6.                 }
  7.         public static boolean fun(String str){
  8.                 StringBuffer sb=new StringBuffer(str);
  9.                 StringBuffer newsb=sb.reverse();
  10.                 String newstr=newsb.toString();
  11.                 return str.equals(newstr);
  12.         }
  13. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报 1 0
对呀!我咋没想到呢?可以将字符串的长度%2判断是0还是1就行了,然后再取子串这样简单多了!而且运行效率也提高了n倍呢!谢谢大家了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马