[Java2入門經典]第4章 數組和字符串

什麼是數組,如何聲明和初始化數組。
如何訪問數組中的單個元素。
如何使用數組中的單個元素。
如何聲明嵌套數組。
如何建立可變長度的嵌套數組。
如何建立String對象。
如何建立並使用String對象的數組。
對String對象能夠進行哪些操做。
什麼是StringBuffer對象以及它們與String對象的操做有何關係。
對StringBuffer對象能夠進行哪些操做。

4.1.1數組變量
數組變量和它所引用的數組是兩個相互分離的實體。爲數組變量所分配的內存空間保存着對數組對象的引用,而不是數組對象自己。
數組對象自己是一個存在於內存其餘位置的獨特實體。
全部引用對象的變量所存儲的都是引用,引用記錄着它們所引用的對象的內存地址。

聲明數組變量:
int[] primes;與 int primes[]; 等價

4.1.2數組定義
primes = new int[10];

4.1.3數組的長度
primes.length

4.1.4訪問數組元素
4.1.5數組變量的重用
int[] primes;
primes = new int[10];
...
primes = new int[50]; //先前包含10個元素的數組連同其中所存儲的數據值都被丟棄。

4.1.6數組初始化
int[] primes = {2,3,5,7,11,13,17};
數組對象自己是可寫的,即primes[3]=99是可行的,本覺得數組對象自己會在常量區(之前的模糊印象)。
1.使用實用方法初始化數組
double[] data = new double[50];
Arrays.fill(data, 1.0);這個方法適用任何基本數據類型的數組。
由於fill()是Arrays類中的一個靜態方法,因此能夠:
import static java.util.Arrays.fill;
fill(data, 1.0);

2.初始化數組變量
long[] even={2L,4L,6L,8L,10L};
long[] value = even;
兩個數組變量引用同一個數組。

4.1.7使用數組
對數組使用collection-based for循環
double[] samples = new double[50];
...
double average = 0.0;
for(double value : samples){
average += value;
}
average /= samples.length;

4.1.8嵌套數組
4.1.9字符數組

4.2字符串
4.2.2 建立String對象
String對象被稱做是永久的,也就是說它們不能夠改變。
4.2.3 字符串數組

4.3字符串的運算
4.3.1字符串的鏈接
4.3.2字符串的比較
== 將判斷兩個String變量是否引用同一個字符串,即比較的是地址。

1.字符串相等性的比較
string1.equals(string3) 對大小寫敏感
string1.equalsIgnorecase(string3) 忽略大小寫

2.字符串扣留
字符串扣留可以確保不存在封裝有徹底相同字符串的兩個String對象,所以全部的String對象封裝的字符串對象都唯一。String string1 = "Too many ";String string2 = "cooks";String string3 = "Too many cooks";string1 += string2;string1 = string1.intern();string1 == string3 的求值結果爲true,由於引用同一個對象。字符串扣留有兩個好處。第一,減小保存String對象所須要的內存總量。第二,當但願比較兩個字符串的相等性時容許使用「==」操做符來代替equals()方法。3.檢測字符串的開始和結束string1.startsWith("Too");string1.endsWith("cooks");4.3.3字符串的排序string1.compareTo(string3)4.3.4訪問字符串中的字符String text = "To be or not to be, that is the question; Whether";int textLength = text.length();for(int i = 0; i<textLength; i++) char ch = Character.toLowerCase(text.charAt(i));Character.isLetter(ch)Character.isWhitespace(ch)4.3.5搜索字符串中的字符text.indexOf('a');text.lastIndexOf('a');text.indexOf('a',startIndex);4.3.6子串搜索4.3.7提取子串text.substring(5);text.substring(7,11); //注意,從index = 7開始,到index = 11 - 1;切分字符串split()String[] words = text.split("[, .]",0);以逗號、空格、句號爲分隔符。4.3.8 String對象的修改版本String newText = text.replace(' ', '/');String sample = " This is a string ";String result = sample.trim();4.3.9 由String對象建立字符數組String text = "To be or not to be";char[] textArray = text.toCharArray();String text = "To be or not to be";char[] textArray = new char[3];text.getChars(9,12,textArray, 0);4.3.10 對字符串使用collection-based for循環程序中不能夠直接使用String對象做爲collection-based for循環的取值範圍,可是可使用數組做爲其取值範圍。所以,toCharArray()方法就提供了一種使用collection-based for循環遍歷字符串中字符的方法。String phrase = "The quick brown fox jumped over the lazy dog.";int vowels = 0;for(char ch : phrase.toCharArray()){ ch = Characger.toLowerCase(ch); ...}4.3.11 以字節數組的形式獲取字符串中的字符String text = "To be or not to be";byte[] textArray = text.getBytes(); 只存放8位的字符4.3.12 由字符數組建立String對象String類還有一個靜態方法 copyValueOf(),能夠從char[]類型數組建立String對象。char[] textArray = {'T','o',' ','b','e',' ','o','r',' ','n','o','t',' ','t','o',' ','b','e'};String text = String.copyValueOf(textArray);String text = new String(textArray);String text = String.copyValueOf(textArray, 9, 3);String text = new String(textArray, 9, 3);4.4 可變字符串String對象不可以被更改。Java語言還有另兩種封裝字符串的標準類,即StringBuffer類和StringBuilder類,且其對象可被直接更改。StringBuffer對象對多線程的應用是安全的,而StringBuilder對象並不是如此。4.4.1建立StringBuffer對象StringBuffer aString = new StringBuffer("A switch in time");String phrase = "Experience is what you get when you're expecting something else.";StringBuffer buffer = new StringBuffer(phrase);4.4.2 StringBuffer對象的容量String對象包含固定的字符串,內存是固定的。StringBuffer對象包含了緩衝區,緩衝區的長度被稱爲StringBuffer對象的容量。StringBuffer aString = new StringBuffer("A switch in time");int theLength = aString.length();int theCapacity = aString.capacity();4.4.3 爲StringBuffer對象改變字符串的長度
相關文章
相關標籤/搜索