如何将包含值的集合转换为字符串。

5
public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "abcdaa";
        dups(str);
    }
    public static void dups(String str){
        HashSet hs = new HashSet();
        char[] ch = str.toCharArray();
        for(int i=0; i < ch.length;i++){
            hs.add(ch[i]);
        }
        System.out.println(hs);
    }

上面的代码返回输出:[a,b,c,d] 但我想将Set值打印成字符串,以便我可以返回一个字符串值,返回值应该像这样:abcd

请查看 java.util.StringJoiner - Steve Kuo
4个回答

2
 public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "abcdaa";
        dups(str);
    }

    public static void dups(String str) {
        HashSet<Character> hs = new HashSet<Character>();
        char[] ch = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < ch.length; i++) {
            if(hs.add(ch[i])){
                sb.append(ch[i]);
            }
        }
        System.out.println(sb);
    }

编辑

public static void dups(String str) {
            HashSet<Character> hs = new HashSet<Character>();
            StringBuilder sb = new StringBuilder();
            for (Character character : str.toCharArray()) {
                if(hs.add(character)){
                    sb.append(character);
                }
            }
            System.out.println(sb);
        }

我认为有更好的方法来做这件事...最好使用StringBuilder而不是String,请查看此答案https://dev59.com/JnI_5IYBdhLWcg3wFu_L#1532483


1
为什么不使用现代语言功能呢? System.out.println(hs.stream().collect(Collectors.joining())); - DavidW
我不确定如何使用Java 8流 =S - Erick Maia
谢谢@ErickMaia..它有效了..但我正在寻求优化,而不是使用StringBuilder。 - user1918566

2

不确定为什么还没有人提到这一点,但在Java 8中非常简单:

System.out.println(String.join("", hs));

请注意,如果您想保留原始顺序,您需要使用LinkedHashSet

0
public static void main(String[] args) {
    // TODO Auto-generated method stub
    String str = "abcdaa";
    String result = dups(str);
    System.out.println(result);
}
public static String dups(String str){
    HashSet hs = new HashSet();
    String strss = "";
    char[] ch = str.toCharArray();
    for(int i=0; i < ch.length;i++){
        if(hs.add(ch[i])){
            strss +=ch[i];
        }
    }
    return strss;
}

返回的不是abcd=(。 - Erick Maia
1
我已经检查过了,它返回的是“abcd”。 - Vasyl Lyashkevych
1
strss += 这种写法不好,因为每次都会分配一个新的字符串。这正是 StringBuilder 的用途。 - Steve Kuo
字符串是不可变的,因此创建新实例没有任何价值。 - Steve Kuo
是的,你说得对,在这个例子中,“strss”将没有值。我考虑的是我们有一个新实例的情况。 - Vasyl Lyashkevych
显示剩余2条评论

0

如果您可以使用第三方库,Eclipse Collections 中的 CharAdapter 类可以解决这个问题。

String str = "abcdaa";
CharAdapter distinct = CharAdapter.adapt(str).distinct();
System.out.println(distinct);

你可以在这里看到代码的作用。使用java.util.HashSet将把char值装箱为Character对象。在CharAdapter中的distinct方法使用CharHashSet,它不需要装箱char值。

注意:我是Eclipse Collections的提交者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接