1. 程式人生 > >String 的常用操作

String 的常用操作

String 類,我可以不負責的說在 Java 中這個類應該是使用最頻繁的類了。然而關於它的常用的操作,我卻不甚瞭解。整理這個東西很反人性的,這些方法,你看到他的時候感覺很簡單,但是真正用的時候還是不太會,還是會藉助網路,今天我就來強行整理一波,不求全,但求精。

先說說 String 物件的構造器,建立一個字元創可以使用如下方法

複製程式碼

String s = "123";

String s1 = new String("123");

char[] value = {'1','2','3'};
String s2 = new String(value);
System.out.println(s2); // 123

char[] value1 = {'0','1','2','3','4'};
String s3 = new String(value1,1,3); // 從哪裡開始,取幾位
System.out.println(s3); //123

StringBuilder sb = new StringBuilder("123");
String s4 = new String(sb);
System.out.println(s4); //123

複製程式碼

我就提一下,為什麼人家類建立物件都用 new ,而 String 可以直接賦值呢?s 和 s1 的區別到底在哪呢?這樣設計的思路還是因為 String 的超高使用頻率,為了節省空間,s 的建立過程為在記憶體中建立一個 “123” 這個 String,然後將引用賦給 s ,如果這個時候還有一條語句 String s5 = “123”,那麼 JVM 將不再建立 “123”,而是直接將第一個 “123” 的引用賦給 s5,也就是說 s 和 s5 使用同一塊記憶體,但是使用 new 建立就不一樣,不論之前有沒有,照樣在堆中開闢新的空間 。

下面就看看常用的方法有那些吧!

基礎篇

複製程式碼

String s = "I don't like JAVA !";

// 返回字串的長度,注意和陣列的length屬性的區別呦 !
int length = s.length(); 
System.out.println(length); // 19

// 返回某個字元在字串中的位置,即陣列下標
int position = s.indexOf('!');
System.out.println(position); // 18

// 返回指定下標的字元
char charAt = s.charAt(0);
System.out.println(charAt); // I

// 求子串 引數為下標的起止位置,含前不含後。尾下標可以預設不寫
String substring = s.substring(13, 19);
System.out.println(substring); // JAVA !

// 將字串轉換為 大寫,相應的還有轉換為小寫 toLowerCase()
String s1 = s.toUpperCase();
System.out.println(s1); // I DON'T LIKE JAVA !

複製程式碼

提高篇

複製程式碼

// 字串的替換,前為舊串,後為新串。
String s2 = s.replace("don't", "do");
System.out.println(s2); // I do like JAVA !

// 去除前後空格
String trim =s.trim();
System.out.println(trim); // I don't like JAVA !

// 使用指定的語言環境、格式字串和引數返回一個格式化字串。
String format = String.format("請說出真心話: %s", s);
System.out.println(format); // 請說出真心話: I don't like JAVA !

// 以指定字串進行分割字串,得到字串陣列。
String[] split = s.split(" ");
for (int i = 0; i < split.length; i++) {
    System.out.print(split[i]); // Idon'tlikeJAVA!
}

// 將一個字串轉換成位元組陣列,得到一個系統預設的編碼格式的位元組陣列。
byte[] bytes = s.getBytes();

// 將一個字串轉換成字元陣列 ,返回的陣列中是一個個的字元。
char[] array = s.toCharArray();

複製程式碼

鬱悶篇

不知道你們是怎麼樣的,我在寫程式碼的時候總是會不自覺地使用 “==” 來比較兩個字串是否相等。雖然我明確的知道這是不對的,我想還是因為我程式碼寫的少… ,所以你們記住了啊,要使用 equals 方法的!給個例子,自己感受感受區別。

複製程式碼

String s3 = "123";
String s4 = new String("123");
String s5 = "123";
System.out.println(s3 == s4); // false
System.out.println(s3 == s5); // true
System.out.println(s3.equals(s4)); // true

複製程式碼

最後來看一看基本型別和字串之間的相互轉化。

複製程式碼

String s3 = "123";

int num = Integer.parseInt(s3);
System.out.println(num); // 123

String string = String.valueOf(num);
System.out.println(string); // 123

複製程式碼

套路就是想得到基本資料型別,就使用對應包裝類呼叫包裝類的 praseXXX() 方法。想得到字串就使用 String 呼叫 String 類的靜態過載方法 valueOf() 。