将CSV列表转换为Set <long>且不重复,忽略空值

时间:2017-06-02 14:27:54

标签: java

我希望将逗号分隔的字符串中的数字列表转换为java中的curl https://services.daisycon.com/publishers/{id}/news -u {username}:{password} ,忽略空条目和重复项。分隔符可以是任何字符串,而不仅仅是逗号,但为了简单起见,我在这里使用逗号。

e.g。

Set<Long>

现在// NOTE: Edited to add " " case String csv = "1,2,3, ,4,,2"; Set<Long> set = `???` 应该包含

输出

set

3 个答案:

答案 0 :(得分:1)

Java 8解决方案如下:

1,2,3,4

答案 1 :(得分:1)

另一种for loop中有一个if-statement的方法(如果用户不想使用Stream或利用Java 8新功能):

import java.util.HashSet;
import java.util.Set;

public class ConvertCSVToSETLong {

    public static void main(String[] args){
        // different numbers of commas
        String csv = "1,,,,2,3,,,,4,,,,2,,5,,6,7,1"; 
        Set<Long> set = new HashSet<Long>();

        for(String s : csv.split(",")){
            if(!s.trim().isEmpty()){
              set.add(Long.parseLong(s));
            }
        }

        System.out.println(set); // test
    }
}

<强>输出

[1, 2, 3, 4, 5, 6, 7]

答案 2 :(得分:0)

使用扫描仪

    String csv = "1,2,3,4,,2";
    Set<Long> set = new HashSet<>();
    try (Scanner sc = new Scanner(csv)) {
        sc.useDelimiter(",");
        while (sc.hasNext()) {
            String next = sc.next();
            if (!next.equals("")) {
                set.add(Long.parseLong(next));
            }
        }
    }
    System.out.println(set);