在编程过程中偶尔会遇到需要将List或数组以某个字符间隔的形式将其拼接成一个字符串,比如在发送邮件时,to列表是以分号分割的字符串,然而在程序中我们可能会一List<String>或String[]的形式存在,此时就需要做List或数组到String的转换。
在C#中,String类提供了一个叫Join的方法,因而我们使用一句代码就可以完成这样的工作:
string result = string.Join("; ", toList.ToArray());
但是在Java中貌似没有提供类似的方法(至少我还没有找到),既然没有提供,我们就可以自己来写一个:
public class StringUtils {
/**
* StringUitls类中的方法都是静态的,
* 阻止其创建实例,以引起一些误解。
* 另一种做法是将其变为abstract类,
* 但是这样也会引起一些误解,
* 因为abstract类的意思就是可以继承的,
* 然而该类却不应该由其他类来继承。
* 因而abstract类个人感觉不是一种好的做法。
*/
private StringUtils() { }
/**
* 将array中的内容以delimiter为间隔拼接字符串
*
* @param array
* @param delimiter
* @return
*/
public static String join(Object[] array, String delimiter) {
if(array == null) {
throw new IllegalArgumentException();
}
if(array.length == 0) {
return "";
}
StringBuilder builder = new StringBuilder();
for(Object item : array) {
builder.append(item.toString() + delimiter);
}
builder.delete(builder.length() - delimiter.length(), builder.length());
return builder.toString();
}
/**
* 将list中的内容以delimiter为间隔拼接字符串
*
* @param list
* @param delimiter
* @return
*/
@SuppressWarnings("unchecked")
public static String join(List list, String delimiter) {
if(list == null) {
throw new IllegalArgumentException();
}
return join(list.toArray(), delimiter);
}
}
测试代码如下:
1 @Test
2 public void testListToString() {
3 List<String> list = new ArrayList<String>();
4 list.add("Item1");
5 list.add("Item2");
6 list.add("Item3");
7
8 String expected = "[Item1, Item2, Item3]";
9
10 assertEquals(expected, list.toString());
11 }
12
13 @Test
14 public void testListToString2() {
15 List<String> list = new ArrayList<String>();
16 list.add("Item1");
17 list.add("Item2");
18 list.add("Item3");
19
20 String expected = "Item1;Item2;Item3";
21
22 assertEquals(expected, StringUtils.join(list, ";"));
23 }