java如何解决字符串数组溢出_Java字符串到数组的转换--最后放大招

本文是关于如何在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操作符是可以被重写的。在之前的文章

Groovy重载操作符(终极版)已经讲过了。

公众号FunTester首发,原创分享爱好者,腾讯云、开源中国和掘金社区首页推荐,知乎八级强者,欢迎关注、交流,禁止第三方擅自转载。

FunTester热文精选

6fb223418a78a0f6d08a59eb1d6e83eb.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值