Java字串到陣列的轉換--最後放大招
阿新 • • 發佈:2020-11-04
本文是關於如何在Java
中以不同方式將String
轉換為String Array
的幾種方法,按照慣例,文末會分享Groovy
語言中的實現。
split()方法
字串api是通過split()方法新增的,該方法使用分隔符作為輸入,並且字串將根據給定的分隔符進行拆分。最後,它以String []陣列的形式返回每個拆分字串。
在上一篇文章中,我們深入瞭解瞭如何使用帶有不同定界符的split()方法拆分字串。
檢視下面的程式,並將空字串“”傳遞給split()方法。
public class FunTester {
public static void main(String[] args) {
String input = "FunTester";
String[] split = input.split("");
output(Arrays.asList(split));
}
}
複製程式碼
控制檯輸出:
INFO-> 當前使用者:fv,IP:10.60.192.21,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.15.7
INFO-> 第1個:F
INFO-> 第2個:u
INFO-> 第3個:n
INFO-> 第4個:T
INFO-> 第5個:e
INFO-> 第6個:s
INFO-> 第7個:t
INFO-> 第5個:e
INFO-> 第9個:r
Process finished with exit code 0
複製程式碼
input.split("");
"FunTester"
分割成到string[]
陣列,並將結果儲存在split
中。後面是輸出list
物件的方法。內容如下:
public static void output(List list) {
list.forEach(x -> output("第" + (list.indexOf(x) + 1) + "個:" + x.toString()));
}
複製程式碼
現在,轉換後的字串陣列長度和原始字串長度應該相同。檢查程式碼:
output(input.length());
output(split.length);
複製程式碼
控制檯輸出:
9
9
複製程式碼
正則表示式
接下來,看看使用正則表示式的第二種方法,在很多時候,正則表示式可以簡化我們對字串的驗證,例如:郵箱、手機號等等。
再次需要使用split()
方法和正則表示式
,如下所示。
public class FunTester {
public static void main(String[] args) {
String input = "FunTester";
String[] split = input.split("(?!^)");
output(Arrays.asList(split));
output(input.length());
output(split.length);
}
}
複製程式碼
控制檯輸出:
INFO-> 當前使用者:fv,IP:10.60.192.21,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.15.7
INFO-> 第1個:F
INFO-> 第2個:u
INFO-> 第3個:n
INFO-> 第4個:T
INFO-> 第5個:e
INFO-> 第6個:s
INFO-> 第7個:t
INFO-> 第5個:e
INFO-> 第9個:r
INFO-> 9
INFO-> 9
Process finished with exit code 0
複製程式碼
- 這裡說明一下,
split()
方法原始碼中引數定義如下:String regex
,再翻一下過載的方法public String[] split(String regex, int limit)
中的原始碼中做了很多判斷之後才會使用正則,不要被引數名regex
欺騙了。
Guava
Guava API
還內建了對字串陣列轉換的支援。當使用Guava
時,這裡涉及許多步驟。
- 首先使用
toCharArray()
方法將字串轉換為char[]
陣列。 Chars.asList()
方法將char陣列轉換為List
。- 最後使用
List.transform()
和toArray()
方法轉換為String
陣列。 - 的確是非常麻煩的。
這是完整的Demo。
public class FunTester {
public static void main(String[] args) {
String input = "FunTester";
String[] slist = Lists.transform(Chars.asList(input.toCharArray()), Functions.toStringFunction()).toArray(ArrayUtils.EMPTY_STRING_ARRAY);
output(Arrays.asList(slist));
output(input.length());
output(slist.length);
}
}
複製程式碼
控制檯輸出:
與上面相同,不再重複。
複製程式碼
Groovy
下面有請Groovy
出場,程式碼比較簡單,我保留了Java
版本的第一行程式碼。
String input = "FunTester";
def list = input as List
output(list)
output(list.size())
output(input.length())
複製程式碼
- 只用了一個
as
關鍵字就可以了,這裡的as
操作符是可以被重寫的。