上善若水
In general the OO style is to use a lot of little objects with a lot of little methods that give us a lot of plug points for overriding and variation. To do is to be -Nietzsche, To bei is to do -Kant, Do be do be do -Sinatra
posts - 146,comments - 147,trackbacks - 0
在编程过程中偶尔会遇到需要将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     }

posted on 2011-06-20 13:27 DLevin 阅读(6936) 评论(0)  编辑  收藏 所属分类: Core Java

只有注册用户登录后才能发表评论。


网站导航: