Java 带分隔字符串、字符串数组和 ArrayList<String> 之间的转换
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
一、先来认识一下标题说的这三件东西,也许描述的不清楚,但有了下面的例子,就不会有歧义了
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 Commons Lang
这是 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 方法,按你自已的意图来组织,或加个参数,传入分隔符。