【问题标题】:How to convert Set containing values into string如何将包含值的集合转换为字符串
【发布时间】:2017-05-12 16:51:57
【问题描述】:
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

标签: java algorithm collections set hashset


【解决方案1】:
 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://stackoverflow.com/a/1532483/6949032

【讨论】:

  • 为什么不使用现代语言功能? System.out.println(hs.stream().collect(Collectors.joining()));
  • 我不确定如何使用 Java 8 流 =S
  • 感谢@ErickMaia .. 它正在工作.. 但我希望优化它而不是使用 StringBuilder。
【解决方案2】:

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

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

请注意,如果您想保留原始订单,则需要改用LinkedHashSet

【讨论】:

    【解决方案3】:
    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=(
    • 是..返回不是abcd
    • 我检查过了,它返回“abcd”
    • strss += 是个坏主意,因为每次都会分配一个新的字符串。这正是 StringBuilder 的用途
    • 一个新的字符串,我认为这是个好主意,因为你总会有新的实例,有时它可以解开误解
    【解决方案4】:

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

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

    您可以看到代码的作用here。使用java.util.HashSet 会将字符值装箱为Character 对象。 CharAdapter 中的 distinct 方法使用 CharHashSet,它不需要将 char 值装箱。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      相关资源
      最近更新 更多