在編程過程中偶爾會(huì)遇到需要將List或數(shù)組以某個(gè)字符間隔的形式將其拼接成一個(gè)字符串,比如在發(fā)送郵件時(shí),to列表是以分號(hào)分割的字符串,然而在程序中我們可能會(huì)一List<String>或String[]的形式存在,此時(shí)就需要做List或數(shù)組到String的轉(zhuǎn)換。
在C#中,String類提供了一個(gè)叫Join的方法,因而我們使用一句代碼就可以完成這樣的工作:
string result = string.Join("; ", toList.ToArray());
但是在Java中貌似沒有提供類似的方法(至少我還沒有找到),既然沒有提供,我們就可以自己來寫一個(gè):
public class StringUtils {
/**
* StringUitls類中的方法都是靜態(tài)的,
* 阻止其創(chuàng)建實(shí)例,以引起一些誤解。
* 另一種做法是將其變?yōu)閍bstract類,
* 但是這樣也會(huì)引起一些誤解,
* 因?yàn)閍bstract類的意思就是可以繼承的,
* 然而該類卻不應(yīng)該由其他類來繼承。
* 因而abstract類個(gè)人感覺不是一種好的做法。
*/
private StringUtils() { }
/**
* 將array中的內(nèi)容以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中的內(nèi)容以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);
}
}
測(cè)試代碼如下:
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 }
posted on 2011-06-20 13:27
DLevin 閱讀(6998)
評(píng)論(0) 編輯 收藏 所屬分類:
Core Java