Java 中 关于实现字符串反转的几种操作(CharAt6、append1、reverse3、法)(用户从键盘输入一个1~999判断回文)(StringBuffer和String区别简略介绍)

1.①String类是不可变类,而StringBuffer\StringBuilder是可变类
 示例

String a = "123";  //1
a = "456";         //2

以上代码,看似是a被从原本的"123"修改为了"456",其实并不是,
在代码行2,对a进行“赋值”操作,其实是创建了一个新的String对象,
并且a指向新创建的这个对象,原来的对象直到被回收之前仍会存在。

②而StringBuilder\StringBuffer,则是可变类
即,他们的对象都是可变字符串,它没有重新生成一个对象,而是在原对象的基础上连接新的字符串。

但是如果执行添加操作

String x ="abc";
x+="defg";

在形式上等价于以下操作

StringBuffer a = new StringBuffer("abc"); 
                    //创建一个StringBuffer类的对象a
a.append("defg");   //给字符串a的结尾追加字符串"defg"
x = a.toString();   //将a以String形式赋给x

StringBuffer字符串修改方法是首先创建一个StringBuffer,其次调用StringBuffer的append方法,最后调用StringBuffer的toString()方法把结果返回

牵扯到一个知识点append方法
              代码

          x.append(str);  //给字符串a追加子串str

在添加字符串的操作上,String性能不及StringBuffer,如果这种操作较多的话(如循环)建议使用StringBuffer。

StringBuilder性能比StringBuffer更强,但线程不够安全

——————————————分割线———————————————

2.StringBuilder和StringBuffer非常类似
但因为StringBuffer的所有方法中都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。

所以StringBuffer的速度略慢,但线程安全。

而StringBuilder没有上述关键字,故性能略高。

——————————————分割线———————————————

3.关于二者均包含的的reverse()方法的反转字符串的功能的示例及解释
 
 示例

public class Test{
public static void main(String args[]){
String ans = "Mustang";
String reverse_ans = new StringBuffer(ans).reverse().toString();//1
System.out.println(reverse_ans);  
//最终输出gnatsuM 
}
}

1行处toString()是将StringBuffer以String类形式输出,返回给reverse_ans;

——————————————分割线———————————————

4.关于利用 String 的 toCharArray 方法先将字符串转化为 char 类型数组的反转字符串方法
以做题的形式实现。

问题:
用户从键盘输入一个1~9999之间的数,判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121,3223都是回文数。 
             代码

import java.util.*;
   public class Test{
   public static void main(String args[]){
   Scanner reader = new Scanner(System.in);
   String x = reader.nextLine();
   char []arr = x.toCharArray(); 
   String ans = "";
   for(int i =arr.length-1;i>=0;i--)
   ans = ans+arr[i];
   if(ans.equals(x))  //1111111111  
   System.out.println("是回文数");
   else
   System.out.println("不是回文数");
}
}

注释处的判断ans和x是否相等的方法是

                         a.equals(b);

而不是

 a==b  //错!

因为a和b都是字符串String类型,如果用==判断两个字符串是不是相等,只是判断的他们的引用是否相等。这是不对的。
想要判断他们的内容是否相等,应该用a.equals(b)判断。

——————————————分割线———————————————

5.利用toCharArray()方法来将String字符串转化为char数组,后反转

String a = "123456";
char [] x = a.toCharArray();
String ans = "";
for(i=x.length;i>=0;i--)
ans = ans+x[i];
System.out.println(ans);//得到反转字符串654321

——————————————分割线———————————————

6.利用String的CharAt方法,将字符串挨个取出后附加

public class Test{  
public static void main(String args[]) {
    String reverse = "";
    String str = "abc";
    int length = str.length();
    for (int i = length-1; i >= 0; i--) {
      reverse = str.charAt(i) + reverse;
    }
    System.out.println(str);
  }
}
发布了32 篇原创文章 · 获赞 6 · 访问量 1534

猜你喜欢

转载自blog.csdn.net/Pan_ZC/article/details/104964299
今日推荐