Java 陣列

[Java] 如何把字串切成一個字串陣列? (Using String Split Function)

以一個 CSV 的檔案來說,通常都會使用「逗點」來切將幾個欄位分開,而如果我們是使用 JAVA 來讀檔案,勢必一定要將這些欄位切成許多的字元陣列,來方便我們做後續的處理。在 JAVA 中,其實有很好的讀檔案機制,和相當多的字串函式,我們可以透過 JAVA 內建的字元函式,將字串切成字串陣列。

 

而使用的方式很簡單,只要呼叫字串的「Split」函式就可以了。而以下是一個範例。

String mustSplitString = "A, B, C, D, E,F, G, H";
String[] AfterSplit = mustSplitString.split(",");
for (int i = 0; i < AfterSplit.length; i++)
    System.out.println(AfterSplit[i]);

 

 

在使用了這個範例之後,我們可以得到以下的結果。

A
 B
 C
 D
 E
F
 G
 H

Continue reading

[Java] 陣列的複製方法

在Java中,如果要複製兩個陣列的內容,除了動手寫迴圈,一個一個陣列元素慢慢複製外,還有更懶的方法嗎?答案是有的,在Java的System類別中,裡面有一個arraycopy的method,只要呼叫這個method,就可以輕易地幫您複製整個函式了。

而讓我們看一下這個method怎麼用。

System.arraycopy(src, srcPos, dest, destPos, length)

其中,src是指來源陣列,dest是指目標陣列。

而srcPos則是指來源陣列的開始位置,destPos則是指目標陣列的開始位置,length則是指要複製的陣列長度。

如果您要完整地複製陣列,那麼只要使用這個method,就可以輕鬆地幫你辦到了喔!

PS:dest陣列要先配置空間喔,如以下程式碼:

int dest[] = new int[src.length];

另一種方法則是使用System類別中的arraycopy這個method,不過他要填入五個參數,對於懶人的程式設計師來說,這參數也未免太多了吧,而且又是在System類別中,誰知道他會藏在那呢?為什麼不集中在Arrays這個類別中呢?

而在Java 1.6版之後,Arrays這個類別中,引進了陣列複製的method,他叫做copyOf,先來看他的method怎麼用吧。

Arrays.copyOf(src, length)

其中,src是指來源陣列,length則是指複製的長度。

而這個method非常有趣,他的length是隨便您填,舉例而言,如果您的來源陣列長度是5,而你只要複製前4個元素,您只要在length輸入4即可,但若是您填超過5,那麼他剩下的便會以預設值顯示。

舉例而言:

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, array1.length-1);

此時array2的內容為{1,2,3,4}。

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, 7);

此時array2的內容為{1,2,3,4,5,0,0}。

所以,如果要複製整個陣列的話,可以想見只要打以下程式碼即可。

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, array1.length);

這個可以說是非常方便地複製整個陣列的method。

最後一個要介紹的方法則是Arrays類別中的copyOf method。在Java 1.6版之後,在Arrays類別底下另外還提供copyOfRange這個method,不同於copyOf這個method,copyOfRange可以讓您自由地選擇範圍複製。

而他的函式原型如下:

Arrays.copyOfRange(src, from, to)

其中from和to分別代表陣列的索引值,換言之,「to-from」則是複製的個數。

至於怎麼使用呢?舉個例子來說明。

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOfRange(array1, 1, 4);

則array2的內容會是{2,3,4}

因為我們曾經提過,「to-from」為複製的個數,所以在這裡的複製個數即為3,複製範圍則從 array1[1] 開始。

總結來說,copyOfRange 比 copyOf 這個method更有彈性,但 copyOf 這個則是length的長度可以自由設定,超過原陣列的長度則是補陣例的預設值,您可以選擇一個適合您要用的method來使用他。

[Java] 陣列的排序

在演算法中,常見的排序方法不外乎有泡沫排序法(Bubble Sort)、插入排序法(Insertion Sort)、 合併排序法(Merge Sort)、謝耳排序法(Shell Sort)、二元樹排序法(Binary Tree Sort)、堆積排序法(Heap Sort)、快速排序法(Quick Sort)及基數排序法(Radio Soft)等等。而海芋在這不是要教大家寫一個排序的演算法,而是要告訴大家,如何排序一個陣列中的元素呢?

在「陣列的比較」一文中曾經提到Arrays這個類別,在它之中還內建一個sort的method,可以讓您的資料由小到大遞增排序。

說了這麼多,怎麼用呢?用一個程式碼來說明吧。

char []passwordArray = {'H','I'};
compareResult = Arrays.sort(passwordConfirmArray);

而在這個method中,他僅僅提供由小到大的排序,至於由大到小的排序,可能您就要自己寫囉!而如果您能發展出一套演算法,比Sun的演算法快,就算只快0.01秒,那麼海芋勸您現在就起身離開電腦,趕快去申請一個專利吧!

[Java] 陣列的比較

在Java這個程式語言中,若要比較兩個陣列的內容是否相等,要怎麼比較呢?其實在Arrays這個類別中,Java就已經幫你實作了,只要再呼叫Arrays這個類別中的euqals這個method就可以囉!

而讓我們先看一下equals這個method吧!

static boolean equals(boolean[] a, boolean[] a2)
static boolean equals(byte[] a, byte[] a2)
static boolean equals(char[] a, char[] a2)
static boolean equals(double[] a, double[] a2)
static boolean equals(float[] a, float[] a2)
static boolean equals(int[] a, int[] a2)
static boolean equals(long[] a, long[] a2)
static boolean equals(Object[] a, Object[] a2)
static boolean equals(short[] a, short[] a2)

Continue reading