把List<String>转化为以","隔开的字符串的方法

一个把List<String>转化为以","隔开的字符串的方法

自由者 发布于 2010年12月15日 12时, 23评/70861阅 

  


分享到: 


.
 

收藏	+11 

踩 顶 1 


一个把List转化为以","隔开的字符串的方法,JDK5中通过测试 

 其实这只是一个可以举一反三的例子: 
List可以换成类似数据结构的类型 
 泛型String也可以改成其它类型 
 分割字符","也可以通过参数传进来 
... 
方法的实现再稍作修改即可 


标签: List 字符串 

 

   
代码片段(2) [全屏查看所有代码] 


1. [代码][Java]代码      




?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
import java.util.ArrayList;
import java.util.List;
/**
 * 集合操作
 * @author intrl
 * @date 2010-12-15
 * @version 1.0
 */
public class Test {
 
    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        System.out.println(listToString(list));//aaa,bbb,ccc
    }
     
    public static String listToString(List<String> stringList){
        if (stringList==null) {
            return null;
        }
        StringBuilder result=new StringBuilder();
        boolean flag=false;
        for (String string : stringList) {
            if (flag) {
                result.append(",");
            }else {
                flag=true;
            }
            result.append(string);
        }
        return result.toString();
    }
}
 


2. [代码][Java]代码      




?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 
import java.util.ArrayList;
import java.util.List;
/**
 * 
 * @author intrl
 * @date 2010-12-23
 * @version 1.0
 */
public class Test {
 
    public static void main(String[] args) {
 
        List<Person> list = new ArrayList<Person>();
        list.add(new Person("张三", 15));
        list.add(new Person("李四", 12));
        list.add(new Person("王五", 10));
        // 打印年龄不小于12岁的人员
        System.out.println(listToString(list, 12, "&"));// 张三&李四
    }
 
    /**
     * 获取年龄>=age的人员信息
     * 
     * @param list
     * @param age
     * @return
     */
    public static String listToString(List<Person> list, int age, String sep) {
        if (list == null) {
            return null;
        }
        StringBuilder result = new StringBuilder();
        boolean flag = false;
        for (Person person : list) {
            if (person.getAge() < age) {
                continue;
            }
            if (flag) {
                result.append(sep==null?"":sep);
            } else {
                flag = true;
            }
            result.append(person.toString());
        }
        return result.toString();
    }
}
 
class Person {
    private String name;
    private int age;
 
    public Person() {
    }
 
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public String getName() {
        if (name == null) {
            name = "";
        }
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    @Override
    public String toString() {
        return getName();
    }
}
 
 

举报



开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»




相关的代码(50)
10回/50161阅 [Java] Java基础:数组Array转成List的几种方法 7年前 By 绿悠悠   
7回/17721阅 [Java] Java 比较两个 List 的值是否相等 6年前 By 鉴客   
0回/13237阅 [其他] Lua实现的常用string库 7年前 By apache   
3回/12452阅 [PHP] PHP中文字符串截取函数 7年前 By 疯狂的流浪   
2回/11636阅 [JavaScript] 将JSON转换成HTML列表显示 6年前 By gurdy   
2回/7732阅 [Java] 常用java字符串操作函数(转) 7年前 By 小编辑   
6回/7497阅 [Java] 统计文本中某个字符串出现的次数 6年前 By jingshishengxu   
0回/5668阅 [Scala] Scala字符串处理常用函数 6年前 By 曾建凯   
1回/4746阅 [Java] 字符串转十六进制字符串,解决中文乱码问题 6年前 By fuhao715   
12回/4189阅 [Java] OSChina 的一个工具类 MyListUtils 7年前 By 红薯   
显示所有 » 

发表评论 回到顶部  网友评论(23) 


  
1楼:laserdance 发表于 2010-12-15 13:29 回复此评论  


        Object[] test= new Object[] {

                "javaeye", new Object[] {}, 

                "wenth", new Object[] {},

                "laserdance", new Object[] { "wenth" },

                "javaeye", new Object[] { "wenth", "laserdance"} };

		System.out.println(java.util.Arrays.deepToString(test));

这个方法不知道符合你的要求么






 


  
2楼:programtic 发表于 2010-12-15 14:47 回复此评论  

apache 的common包下面的StringUtils工具类提供了:

Open DeclarationString org.apache.commons.lang.StringUtils.join(Collection collection, String separator)


 


  
3楼:programtic 发表于 2010-12-15 14:47 回复此评论  

我这里没得源码,可以看看他们的实现方式。

 


  
4楼:programtic 发表于 2010-12-15 16:21 回复此评论  

开始没仔细看楼主的代码,刚看了下,好简洁。

 


  
5楼:匿名网友 发表于 2010-12-15 17:29 回复此评论  

List<String> list = new ArrayList<String>();
 .....
 String str = Arrays.toString(list);
 System.out.println(str.substring(1, str.length()-1));


 


  
6楼:老腊肉 发表于 2010-12-15 20:12 回复此评论  

这代码太垃圾了 

为什么不 
int length = arr.length ;
 StringBuffer buf = new StringBuffer("");
 if(length > 0){
     buf.append(arr[0]);
 }
 for(int i = 1 ; i < length ; i++){
    buf.append(',');
 buf.append(arr[i]);
 }








 


  
7楼:jakic 发表于 2010-12-15 20:39 回复此评论  

就是

 


  
8楼:programtic 发表于 2010-12-16 00:35 回复此评论  

apache common包下的StringUtils的join方法:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
public static String join(Iterator iterator, String separator) {
 
        // handle null, zero and one elements before building a buffer
        if (iterator == null) {
            return null;
        }
        if (!iterator.hasNext()) {
            return EMPTY;
        }
        Object first = iterator.next();
        if (!iterator.hasNext()) {
            return ObjectUtils.toString(first);
        }
 
        // two or more elements
        StringBuffer buf = new StringBuffer(256); // Java default is 16, probably too small
        if (first != null) {
            buf.append(first);
        }
 
        while (iterator.hasNext()) {
            if (separator != null) {
                buf.append(separator);
            }
            Object obj = iterator.next();
            if (obj != null) {
                buf.append(obj);
            }
        }
        return buf.toString();
    }
 


 


  
9楼:programtic 发表于 2010-12-16 00:37 回复此评论  

思路貌似和 “覃正平”的差不多。

 


  
10楼:自由者 发表于 2010-12-16 12:46 回复此评论  



引用来自“覃正平”的评论

这代码太垃圾了 

为什么不 
int length = arr.length ;
 StringBuffer buf = new StringBuffer("");
 if(length > 0){
     buf.append(arr[0]);
 }
 for(int i = 1 ; i < length ; i++){
    buf.append(',');
 buf.append(arr[i]);
 }







确实是个比较不错的实现,领教了! 只是本人比较喜欢foreach循环,省去了根据下标来取数据项
 


  
11楼:自由者 发表于 2010-12-16 12:47 回复此评论  



引用来自“张优”的评论

apache common包下的StringUtils的join方法:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
public static String join(Iterator iterator, String separator) {
 
        // handle null, zero and one elements before building a buffer
        if (iterator == null) {
            return null;
        }
        if (!iterator.hasNext()) {
            return EMPTY;
        }
        Object first = iterator.next();
        if (!iterator.hasNext()) {
            return ObjectUtils.toString(first);
        }
 
        // two or more elements
        StringBuffer buf = new StringBuffer(256); // Java default is 16, probably too small
        if (first != null) {
            buf.append(first);
        }
 
        while (iterator.hasNext()) {
            if (separator != null) {
                buf.append(separator);
            }
            Object obj = iterator.next();
            if (obj != null) {
                buf.append(obj);
            }
        }
        return buf.toString();
    }
 

多谢分享!学习了!
 


  
12楼:燃灯 发表于 2010-12-16 13:49 回复此评论  




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
import java.util.ArrayList;
import java.util.List;
/**
 * 集合操作
 * @author intrl
 * @date 2010-12-15
 * @version 1.0
 */
public class Test {
 
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("aaa"+",");
        list.add("bbb"+",");
        list.add("ccc"+",");
        System.out.println(listToString(list));//aaa,bbb,ccc
    }
}
 

 


  
13楼:自由者 发表于 2010-12-17 18:24 回复此评论  



引用来自“张优”的评论

开始没仔细看楼主的代码,刚看了下,好简洁。
如果我在25行和26行之间加入逻辑代码也是可以的,如: if("aaa".equals(string)){ continue; } 此时结果将是bbb,ccc 依然可以得出正确结果 。当然这段逻辑代码可以通过传参做到更灵活,等等。。
 


  
14楼:programtic 发表于 2010-12-17 18:28 回复此评论  

什么意思? 没明白楼上的。 主要是你的代码在循环里面有判断,每循环一次,都要判断if,从效率角度来说,应该效率不怎么高。 


 


  
15楼:自由者 发表于 2010-12-21 12:54 回复此评论  



引用来自“张优”的评论

什么意思? 没明白楼上的。 主要是你的代码在循环里面有判断,每循环一次,都要判断if,从效率角度来说,应该效率不怎么高。 

通过传参过滤List中的某些对象(如:aaa)使其不显示在结果中
 


  
16楼:Sky__ 发表于 2010-12-21 23:20 回复此评论  


以后这种代码最好不要发表...  

 


  
17楼:自由者 发表于 2010-12-22 08:29 回复此评论  



引用来自“袁柯”的评论


以后这种代码最好不要发表...  
多谢提醒
 


  
18楼:yeahking 发表于 2010-12-22 14:08 回复此评论  



引用来自“袁柯”的评论


以后这种代码最好不要发表...  
是啊~要保护好自己的代码 
 


  
19楼:君无畏 发表于 2010-12-22 22:12 回复此评论  

我平常都这么用的,不知道对不对? 
List<String>  list=new ArrayList<String>(); 
 list.add("a["); 
 list.add("]b"); 
 System.out.println(list.toString().replaceFirst("^\\[", "").replaceAll("\\]$", ""));

 


  
20楼:gxj413真身 发表于 2010-12-22 23:18 回复此评论  

apache common的代码果然写得好 

 

posted @ 2017-08-04 09:27  sky20080101  阅读(729)  评论(1)    收藏  举报