1. 程式人生 > >Java 帶分隔字串、字串陣列和 ArrayList 之間的轉換

Java 帶分隔字串、字串陣列和 ArrayList 之間的轉換

Java 帶分隔字串、字串陣列和 ArrayList<String> 之間的轉換

一、先來認識一下標題說的這三件東西,也許描述的不清楚,但有了下面的例子,就不會有歧義了

1、帶分隔字串是這樣的:

    String seperateStr = "111,222,333,444,555,666,777";
以逗號分隔;也可以以其它字元或字串進行分隔,或者有多個分隔;

2、字串陣列:

    String[] seperates = {"111", "222", "333", "444", "555", "666", "777"};

也可以

    String seperates[] = {"111", "222", "333", "444", "555", "666", "777"};

或者
    int arraySize = 7;
    String[] seperates = new String[arraySize ];
    seperates[0] = "111";
    seperates[0] = "222";
    seperates[0] = "333";
    seperates[0] = "444";
    seperates[0] = "555";
    seperates[0] = "666";
    seperates[0] = "777";
再或者
    String[] seperates = new String[]{"111", "222", "333", "444", "555", "666", "777"};

3、ArrayList<String>
    List seperateList = new ArrayList<String>();

二、如何在三件東西間轉換呢?

1、帶分隔字串 與 字串陣列間轉換

a、遍歷拼接,從字串陣列轉換成帶分隔的字串;

b、查分隔個數初始化字串陣列,再逐一查分隔位置取子串賦值給字串陣列元素;

上面提到這兩種方法,確實很夠底層,不過確實浪費時間,為什麼 Java 的內建方法中沒有像 iOS 中的方便處理方法呢:

        NSString *seperateStr = @"111,222,333,444,555,666,777";
        NSArray *seperates = [seperateStr componentsSeparatedByString:@","];
        
        NSString *seperateBackStr = [seperates componentsJoinedByString:@","];

彆著急,Java 沒自帶,不妨找外援。

這是 Apache 提供的通用工具庫,關於字串工具 StringUtils 的詳細文件見此頁

    String[] seperates = StringUtils.split(seperateStr, ",");
    String resultStr = StringUtils.join(seperates, ",");
這不就有了嗎!唯一的遺憾,功能不內聚,需要引入三方工具庫。

實際上,Java 的 String 類提供了 split 方法,可以進行分隔轉成陣列,但相比上面庫的功能,那可是捉襟見肘了:

String 類提供的分隔方法:

StringUtils 提供的分隔方法:

這個工具庫的功能遠不止於此,下面摘要部分:

2、字串陣列與 ArrayList<String> 之間的轉換

這要藉助於  Collections 類的方法來完成轉換了。

將字串陣列中的元素一次性新增到 ArrayList<String> 中:

    Collections.addAll(seperateList, seperates);

將 ArrayList<String> 轉換成 陣列:
    String[] seperateStr = (String[]) seperateList.toArray();

3、至於 ArrayList<String> 與字串之間的轉換,可能意義會有所不同了

如果是想按上面的分隔方式,那麼有上面的鏈條,足以進行轉換了,確實沒有太便捷的方法;

再有,就是 toString() 方法會以字串形式呈現該 ArrayList 物件,僅描述而已,你也可以派生子類,過載 toString 方法,按你自已的意圖來組織,或加個引數,傳入分隔符。