本文是关于如何在Java
中以不同方式将String
转换为String Array
的几种方法,按照惯例,文末会分享Groovy
语言中的实现。
split()方法
字符串api是通过split()方法添加的,该方法使用分隔符作为输入,并且字符串将根据给定的分隔符进行拆分。最后,它以String []数组的形式返回每个拆分字符串。
在上一篇文章中,我们深入了解了如何使用带有不同定界符的split()方法拆分字符串。
查看下面的程序,并将空字符串“”传递给split()方法。
publicclassFunTester{ publicstaticvoidmain(String[]args){ Stringinput="FunTester"; String[]split=input.split(""); output(Arrays.asList(split)); } }
控制台输出:
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 Processfinishedwithexitcode0INFO->当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.7
input.split("");
方法将字符串"FunTester"
分割成到string[]
数组,并将结果存储在split
中。后面是输出list
对象的方法。内容如下:
list.forEach(x->output("第"+(list.indexOf(x)+1)+"个:"+x.toString())); }publicstaticvoidoutput(Listlist){
现在,转换后的字符串数组长度和原始字符串长度应该相同。检查代码:
output(split.length);output(input.length());
控制台输出:
99
正则表达式
接下来,看看使用正则表达式的第二种方法,在很多时候,正则表达式可以简化我们对字符串的验证,例如:邮箱、手机号等等。
再次需要使用split()
方法和正则表达式
,如下所示。
publicstaticvoidmain(String[]args){ Stringinput="FunTester"; String[]split=input.split("(?!^)"); output(Arrays.asList(split)); output(input.length()); output(split.length); } }publicclassFunTester{
控制台输出:
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 Processfinishedwithexitcode0INFO->当前用户:fv,IP:10.60.192.21,工作目录:/Users/fv/Documents/workspace/fun/,系统编码格式:UTF-8,系统Mac OS X版本:10.15.7
这里说明一下,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。
publicstaticvoidmain(String[]args){ Stringinput="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); } }publicclassFunTester{
控制台输出:
与上面相同,不再重复。
Groovy
下面有请Groovy
出场,代码比较简单,我保留了Java
版本的第一行代码。
deflist=inputasList output(list) output(list.size()) output(input.length())Stringinput="FunTester";
只用了一个as
关键字就可以了,这里的as
操作符是可以被重写的。在之前的文章Groovy重载操作符(终极版)已经讲过了。
公众号FunTester首发,原创分享爱好者,腾讯云、开源中国和掘金社区首页推荐,知乎八级强者,欢迎关注、交流,禁止第三方擅自转载。