做了一个测试字符串是否为回文字符串的小程序,结果让我囧了~~我是新手,没有很多分,请各位前辈指教package String;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;//判断是否为回文字符串
public class huiwenString {
public static void main(String[] args)
{
System.out.println("请输入字符串:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
try {
String line  = bf.readLine();
StringBuffer line1 = new StringBuffer(line);
                StringBuffer str = line1.reverse();
                System.out.println(str);
if(line1.equals(str))
{
System.out.println("这是一个回文字符串");
}
else
{
System.out.println("这不是一个回文字符串!");
} } catch (IOException e) {
e.printStackTrace();
}
}
}运行结果:
请输入字符串:
123456
654321
这是一个回文字符串无论输入什么都说是回文字符串,尽管str和line1不相等,这是怎么回事呀,各位前辈指点一下迷津喂~

解决方案 »

  1.   

    我是初学者,StringBuffer str = line1.reverse(); 似乎把line1本身改变了
      

  2.   

    确实是改变了呀。
    把它变成StringBuffer  
    我的意图就是这样啊
      

  3.   

    LZ可以看一下对应的api
        public synchronized StringBuffer reverse() {
    super.reverse();
    return this;
        }
    reverse方法的返回是this 。
      

  4.   

    初期值:line1:"123456",
    执行语句:StringBuffer str = line1.reverse();
    执行之后:str:"654321",line1:"654321";
      

  5.   


        System.out.println("请输入字符串:");
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        try {
            String line = bf.readLine();
            StringBuffer line1 = new StringBuffer(line);
            if (line1.reverse().toString().equals(line)) {
                System.out.println("这是一个回文字符串");
            } else {
                System.out.println("这不是一个回文字符串!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
      

  6.   

    StringBuffer 的字符串随时都在变动 , 不像String 字符串 不可变
      

  7.   


    public class Test2
    {
    public static void main(String [] args){
      String str="aaabbaaa";
      if(booleanIsPalindrome(str)){
        System.out.println(str+" is a Palindrome");
        }
        else{
         System.out.println(str+" is not a Palindrome");
         }
      }
      public static boolean booleanIsPalindrome(String str){
       String temp="";
       boolean flag=false;
       for(int i=str.length()-1;i>=0;i--){
        temp+=str.charAt(i);
        }
        if(temp.equals(str)){
         flag=true;
         }
        return flag;
       }
    }
    偶做的
      

  8.   

    public class Test2 {    public static void main(String[] args) throws ParseException {
            String[] strs = {
                    "1233521",
                    "123321",
                    "12321"     // 这种算回文么?
                };
            
            for(int i = 0; i < strs.length; i++) {
                System.out.println(strs[i] + " --> " + isPalindromic(strs[i]));
            }
        }
        
        public static boolean isPalindromic(String str) {
            if(str == null) {
                return false;   // null 算回文么?
            }
            if(str.length() == 0) {
                return true;    // 空字符串算回文么?
            }
            char[] chs = str.toCharArray();
            for(int i = 0, k = chs.length / 2; i < k; i++) {
                if(chs[i] != chs[chs.length - i - 1]) {
                    return false;
                }
            }
            return true;
        }
    }
      

  9.   


    StringBuffer str = line1.reverse();这句话使得line1本身也被reverse了,所以line1和str的内容是相同的,所以
    line1.equals(str)肯定是true,
    应该用line1.equals(line).
    改成这样:import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class huiwenString { 
      public static void main(String[] args) { 
        System.out.println("请输入字符串:"); 
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 
        try { 
          String line  = bf.readLine(); 
          StringBuffer line1 = new StringBuffer(line); 
          line1.reverse(); 
          System.out.println(line1); 
          if(line1.equals(line)) { 
            System.out.println("这是一个回文字符串"); 
          } else { 
            System.out.println("这不是一个回文字符串!"); 
          } 
        } catch (IOException e) { 
          e.printStackTrace(); 
        } 
      }

      

  10.   

    晕,我该颜色竟然没有显示,无语
    上面代码是这样的,不好意思:import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class huiwenString { 
      public static void main(String[] args) { 
        System.out.println("请输入字符串:"); 
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 
        try { 
          String line  = bf.readLine(); 
          StringBuffer line1 = new StringBuffer(line); 
          line1.reverse(); 
          System.out.println(line1); 
          if(line1.equals(line)) { 
            System.out.println("这是一个回文字符串"); 
          } else { 
            System.out.println("这不是一个回文字符串!"); 
          } 
        } catch (IOException e) { 
          e.printStackTrace(); 
        } 
      }

      

  11.   

      StringBuffer str = line1.reverse(); 
    line1.reverse(); 这个动作其实在改变line1本身的字符串顺序。
    所以
      StringBuffer str = line1.reverse(); 
    就是
    str =line1;想偷懒 哼哼。自己多声明个中间的字符串来保存数据即可。
    StringBuffer str1 = line1;
    StringBuffer str = str1.reverse();