1. 程式人生 > 其它 >Java Array 和 String 的轉換

Java Array 和 String 的轉換

英文標題【Array to String Conversions】

概述

本頁面中的內容對 Array 和 String 之間互相進行轉換的方法進行一些說明。

我們可以使用 原生 Java(vanilla Java) 或者一些第三方的 Java 工具類來實現這個轉換。ies.

將 Array 轉換為 String

在有時候我們希望將字串的數字或者整數型別的陣列轉換為字串。但是如果我們直接使用toString()來進行轉換的話,你可能會得到類似下面Ljava.lang.String;@74a10858的字串。

上面的字串顯示的是物件的型別和當前這個物件的雜湊程式碼。

但是,java.util.Arrays

工具類也能夠支援一些 toString() 的方法來將 Array 轉換為 String。

Arrays.toString() 將輸入的陣列轉換為字串,在轉換後的字串將會使用逗號分隔符,同時在字串的前後會新增一個方括號 []。

可以考察下面的程式碼:

        String[] strArray = {"one", "two", "three"};
        String joinedString = Arrays.toString(strArray);
        assertEquals("[one, two, three]", joinedString);
        
        int[] intArray = {1, 2, 3, 4, 5};
        joinedString = Arrays.toString(intArray);
        assertEquals("[1, 2, 3, 4, 5]", joinedString);

StringBuilder 的 append() 方法

這個是基於 Java 的原生實現,你可以對需要轉換的陣列進行遍歷,然後將遍歷的結果使用 append() 方法新增到字串後面。

        String[] strArray = {"Convert", "Array", "With", "Java"};
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < strArray.length; i++) {
            stringBuilder.append(strArray[i]);
        }
        String joinedString = stringBuilder.toString();
        assertEquals("ConvertArrayWithJava", joinedString);

另外,如果你的陣列中儲存的資料是整形的話,那麼你可以使用方法轉換函式,首先將整數型別轉換為字串後再新增。

Java Streams API

從 Java 8 及其以上的版本,你可以使用 String.join() 方法將給出的陣列元素使用不同的連線字串連線在一起,在我們使用案例中,我們使用空白字元進行連線。

        String joinedString = String.join("", new String[]{"Convert", "With", "Java", "Streams"});
        assertEquals("ConvertWithJavaStreams", joinedString);

更多的是,我們可以使用 Java Streams API 中的Collectors.joining()方法來進行連線,這個連線的方法將會保留和輸入資料相同的順序。

        String joinedString = Arrays
                .stream(new String[]{"Convert", "With", "Java", "Streams"})
                .collect(Collectors.joining());
        assertEquals("ConvertWithJavaStreams", joinedString);

StringUtils.join()

Apache Commons Lang為字串處理提供了非常好的方法,能夠很好的幫我們解決上面的問題。

這個 join 的方法可以通過輸入的資料進行自動進行合併,合併的結果與你輸入資料的順序相同。

        String joinedString = StringUtils.join(new String[]{"Convert", "With", "Apache", "Commons"});
        assertEquals("ConvertWithApacheCommons", joinedString);

Joiner.join()

同樣的 Guava 也提供了同樣的工具類來使用。

例如,我們可以使用下面的程式碼來對陣列進行連線。

String joinedString = Joiner.on("")
        .skipNulls()
        .join(new String[]{ "Convert", "With", "Guava", null });
assertEquals("ConvertWithGuava", joinedString);

將字串轉換為陣列

同樣的,在有些時候,我們希望能夠將字串轉換為陣列。

最常用的情況就是有一個輸入的字串,使用特定的分隔符,我們需要按照分隔符的位置將字串拆分為陣列。

String.split()

這個是最簡單的方法了,可以直接把字串中的字元使用給定的字元進行拆分,如下面的程式碼:

String[] strArray = "loremipsum".split("");

上面的程式碼將會生成下面的輸出,因為我們沒有給定任何分隔符,所以這個方法將會按照字元進行拆分。

["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]

StringUtils.split()

另外,可能用得最多的就是 Apache 的 Commons 中的StringUtils,這個能夠對指定的字串進行拆分。

如果使用 String 的方法進行拆分的話,可能會遇到空物件的問題,例如你輸入的字串可能是空字串,這個時候 String 自帶的原生方法將會丟擲空異常。

如果使用 StringUtils 方法的話,可以有效的避免空物件的異常,因此這個工具類是非常常用的。在預設的情況下,這個方法使用的是空格作為分隔符。

String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");

上面的方法將會輸出下面的陣列。

["lorem", "ipsum", "dolor", "sit", "amet"]

Splitter.split()

最後,你還可以使用 Guava 的拆分 API,如果 Apache Commons 提供的方法,通常 Guava 也能提供類似的。

例如我們可以使用下面的方法進行拆分,可以看到的是,我們在拆分的時候可以同時對結果進行處理。

List<String> resultList = Splitter.on(' ')
    .trimResults()
    .omitEmptyStrings()
    .splitToList("lorem ipsum dolor sit amet");   
String[] strArray = resultList.toArray(new String[0]);

上面的程式碼能夠生成下面的結果:

["lorem", "ipsum", "dolor", "sit", "amet"]

結論

本頁面對 String 和 Array 之間的轉換方法進行了一些說明。一般來說可以使用原生方法進行轉換,但是我們通常不建議使用,主要是方法功能比較差,同時還非常容易出現空物件異常。

因此建議使用 Apache Commons 或者 Guava 的相關方法進行轉換。

https://www.ossez.com/t/java-array-string/13685