一、概述
字符串廣泛應用 在 Java 編程中,在 Java 中字符串屬於對象,Java 提供了 String 類來創建和操作字符串。String 類是不可改變的,所以你一旦創建了 String 對象,那它的值就無法改變了。
如果需要對字符串做很多修改,那麼應該選擇使用StringBuffer & StringBuilder類,和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,並且不產生新的未使用對象。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。
由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的情況下,則必須使用 StringBuffer 類。
二、String類
String是java中的字符串類,是一種引用類型,修改字符串的值時,會重新創建一個新字串:
StringDemo1.java
public class StringDemo1 {
public static void main(String[] args) {
String s1 = "Hello,world!";
String s2 = "Hello,world!"; //與s1指向同一地址,"Hello,world!"存儲在堆的常量池中
String s3 = new String("Hello,world!"); //創建了一個新對象
System.out.println(s1==s2); //true 地址相等
System.out.println(s1==s3); //false
System.out.println(s1.equals(s3));//true 內容相等 重寫了Object的
byte[] bytes={65,66,67,68}; 正數:字母 負數:漢字(兩個字節)
String str=new String(bytes); // byte數組 轉 字符串
String str=new String(bytes,1,2); //(數組,始值 個數)
byte[] bytes = str.getBytes(); // 字符串 轉 byte數組
char[] ch={'中','a','2'};
String str=new String(ch); // 字符數組 轉 字符串
String str=new String(ch,0,1); // 字符數組 轉 字符串
char[] chs = str.toCharArray(); //字符串 轉 字符數組
}
}
String的常用方法:
str.toString(); 獲取字符串對象的內容 輸出時 自動調用 str.isEmpty(); 判斷字符串是不是空串 str.length(); 返回字符串長度 str.charAt(0); 返回索引處字符 str.equals(str2); 判斷字符串 與 指定字符串的內容是否相同 str.equalsIgnoreCase(str3); 判斷字符串內容是否相同 忽略大小寫 str.substring(1); 截取開始索引 到最後 的字符串 str.substring(2, 4); 截取開始索引 到終止索引(不包括) 的字符串 str.indexOf("bcd"); 返回第一次出現該字符串的索引,沒有返回-1 str.contains("bcd"); 判斷是否包含指定字符串,返回true/false str.startsWith("Demo"); 判斷是否以給定字符串開頭 str.endsWith("java"); 判斷是否以給定字符串結尾 str.toLowerCase(); 把字符串轉換爲小寫字符串 str.toUpperCase(); 把字符串轉換爲大寫字符串 str.trim(); 去掉字符串兩端空格 str.replace(oldChar, newChar); 將替換字符串中的老字符替換爲新字符 str.replace(oldstr, newstr); 將字符串中的老字符串,替換爲新字符串 String[] strArray = str.split(","); 按照指定符號分割字符串
三、StringBuilder類
StringBuilder是java 1.5中新提供的字符串類,效率非常高,與StringBuffer類的用法相同。StringBuffer是線程安全的,StringBuilder是非線程安全的。
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(); //構造方法 初始爲空串
StringBuilder sb = new StringBuilder("world");//構造方法 str 轉sb
String str = sb.toString(); //str 轉sb 輸出時 自動調用
StringBuilder sb2 = sb.append("hello");//添加數據(任意類型)
System.out.println(sb == sb2); //true 地址相同
sb.delete(1, 4); //刪除 [1,4)字符
sb.deleteCharAt(1); //刪除字符
sb.insert(2, "it"); //在指定位置插入
sb.replace(1, 4, "java");//替換[1,4)的字符串爲"java"
sb.reverse();反轉
sb.length(); //返回長度(字符數)
sb.charAt(0); //返回索引處的字符
sb.indexOf("java",5); //查找第一次出現字符串的索引 從指定索引處
String str = sb.substring(0,1); //截取 [0,1) 返回字符串
String str = sb.substring(1); //截取[1,最後] 返回字符串
sb.append("hello").append(true).append(100); //鏈式調用
}
}
四、類型轉換
1、字符串、數組相互轉換:
/**
* 本Demo是字符串和字符數組之間的相互轉換功能的展示
*/
import java.util.Arrays;
public class StringConvertDemo1 {
public static void main(String[] args) {
String sVer = "小宇飛刀!";
char[] cArray;
//把一個字符串轉換爲字符數組
cArray = sVer.toCharArray();//或者直接:cArray = "小宇飛刀".toCharArray();
System.out.println("字符串sVer:"+sVer);
//使用foreach遍歷輸出數組中的元素值
System.out.print("數組cArray:");
for (char ch: cArray) {
System.out.print(ch);
}
//通過Arrays靜態類提供的方法輸出數組的內容:Arrays.toString(數組變量)
System.out.println("\n數組cArray:"+Arrays.toString(cArray));
System.out.println("-----------------------------------------------------------");
char[] cArray2 = {'中','國','人','民'};
String sVer2 = String.valueOf(cArray2);//或者:String sVer2 = new String(cArray2);
System.out.println("數組cArray2的內容:"+Arrays.toString(cArray2));
System.out.println("字符串sVer2的內容:"+sVer2);
System.out.println("-----------------------------------------------------------");
System.out.println("字符串sVer:"+sVer);
System.out.print("原始數組內容cArray:");
System.out.println(cArray);
System.out.println("sVer.equals(cArray):"+sVer.equals(cArray));
System.out.println("sVer.equals(String.valueOf(cArray)):"+sVer.equals(String.valueOf(cArray)));
}
}
2、字符串、數字相互轉換:
public class StringConvertDemo2 {
public static void main(String[] args) {
// 字符串轉成基本類型Xxx.parseXxx(String s); xxx:基本數據類型
String str="12";
System.out.println(str+1); // 121
int s1=Integer.parseInt(str); // str內容必須是int格式
System.out.println(s1+1); // 13
String str2="2.3";
double s2=Double.parseDouble(str2);
System.out.println(s2+1); // 3.3
//基本類型 轉 字符串
String s=12+""; // 方法1
System.out.println(s);
String s3=String.valueOf(2.3); // 方法2
System.out.println(10+s3); // 102.3
String s4 = Integer.toString(12); // 方法3 有參數 不是重寫obj
System.out.println(s4+1); // 13
}
}
3.字符串的格式化
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringFormatDemo {
public static void main(String[] args) {
int x = 16;
char ch = 'A';
byte bt = 97;
double dd = 7851412.957418;
System.out.println(x);
System.out.println(ch);
System.out.println(bt);
System.out.println(dd);
String s1 = String.format("%06d",x);
System.out.println(s1);
System.out.println(String.format("%-6d",x));
System.out.println(String.format("%,3.2f",dd));
System.out.printf("%c",ch); //使用printf()方法可以簡化String.Format()的寫法
System.out.printf("\n%c\n",bt);
Date dt = new Date(); //獲取系統當前日期和時間
//Date對象的格式化串必須以 "%t"開始 F參數表示日期格式爲yyyy-MM-dd T參數表示時間格式爲HH:mm:ss
System.out.printf("%tF %tT",dt,dt);
System.out.println("\n===============================");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
}
更多有關字符串格式化的內容見博主的另一篇貼子:https://blog.csdn.net/xieyunc/article/details/102531684
五、演示DEMO源代碼在github上的倉庫地址:
https://github.com/xieyunc/java_demo.git