2.5 字串
阿新 • • 發佈:2020-10-23
字串是什麼
- 字串(string): 是由 n 個字元組成的一個有序整體( n >= 0 )。例如,s = "BEIJING" ,s 代表這個串的串名,BEIJING 是串的值。這裡的雙引號不是串的值,作用只是為了將串和其他結構區分開。字串的邏輯結構和線性表很相似,不同之處在於字串針對的是字符集,也就是字串中的元素都是字元,線性表則沒有這些限制。
- 空串: 指含有零個字元的串。例如,s = ""
- 空格串: 只包含空格的串。它和空串是不一樣的,空格串中是有內容的,只不過包含的是空格,且空格串中可以包含多個空格。例如,s = " "
- 子串: 串中任意連續字元組成的字串叫作該串的子串。
- 原串(主串):例如:a = "BEI",b = "BEIJING",c = "BJINGEI" 。
- 對於字串 a 和 b 來說,由於 b 中含有字串 a ,所以可以稱 a 是 b 的子串,b 是 a 的主串;
- 而對於 c 和 a 而言,雖然 c 中也含有 a 的全部字元,但不是連續的 "BEI" ,所以串 c 和 a 沒有任何關係。
字串的儲存結構與線性表相同,也有順序儲存和鏈式儲存兩種。
- 字串的順序儲存結構(java中採用這種方式),是用一組地址連續的儲存單元來儲存串中的字元序列,一般是用定長陣列來實現。有些語言會在串值後面加一個不計入串長度的結束標記符,比如 \0 來表示串值的終結。
- 字串的鏈式儲存結構,與線性表是相似的,但由於串結構的特殊性(結構中的每個元素資料都是一個字元),如果也簡單地將每個鏈結點儲存為一個字元,就會造成很大的空間浪費。因此,一個結點可以考慮存放多個字元,如果最後一個結點未被佔滿時,可以使用 "#" 或其他非串值字元補全
例題
給定一個字串,逐個翻轉字串中的每個單詞。例如,輸入: "girl friend have broken up",輸出: "up broken have friend girl "。
解:利用棧的特性處理
import java.util.Stack; public class StringTest { public static void main(String[] args) { String s = "girl friend have broken up"; reverse(s); } private static void reverse(String s) { Stack<String> stack = new Stack<String>(); String temp = ""; for (int i = 0; i < s.length(); i++) { char element = s.charAt(i); //如果是空格就 入棧 if (!Character.isSpaceChar(element)) { temp += element; } else { stack.push(temp); temp = ""; } //入棧 最後一個單詞 if(i==s.length()-1) { stack.push(temp); } } while(!stack.isEmpty()) { System.out.print(stack.pop()+" "); } } }