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);
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章