获取方盒作为输出

时间:2018-08-30 16:12:47

标签: java string char

我试图按字母顺序打印字符串的不同字符,这是其他两个字符串串联的结果。我尝试过,但是我得到的是小方盒作为输出。这是我的代码:

String s1 = "xyaabbbccccdefww", s2 = "xxxxyyyyabklmopq";
String s = s1+s2;
char[] c = s.toCharArray();
java.util.Arrays.sort(c);
char[] res = new char[c.length];
res[0]=c[0];
for(int i = 0; i<c.length ; i++) {
  boolean isDuplicate=false;
  for(int j = 0 ; j<c.length; j++) {
    if(i!=j && c[i]==c[j]) {
      isDuplicate=true;
      break;
    }
  }
  if(!isDuplicate) {
    res[i+1]=c[i];
  }
}
System.out.println(String.valueOf(res));

我得到这样的输出:

Image of output

但是我想要一个输出:

abcdefklmopqwxy

2 个答案:

答案 0 :(得分:2)

在结果中出现框的原因是因为您仅在某些索引中将某些char分配到res数组中,这取决于i条件为!isDuplicate时的值是的。

此外,检测重复字符的逻辑中还有一个错误。请参阅下面的更正。您可以使用StringBuilder代替char数组来存储结果,如下所示:

String s1 = "xyaabbbccccdefww", s2 = "xxxxyyyyabklmopq";
String s = s1+s2;
char[] c = s.toCharArray();
java.util.Arrays.sort(c);
StringBuilder result = new StringBuilder();
for(int i = 0; i<c.length ; i++) {
    boolean isDuplicate=false;
    for(int j = i+1 ; j<c.length; j++) {
        if(c[i]==c[j]) {
            isDuplicate=true;
            break;
        }
    }
    if(!isDuplicate) {
        result.append(c[i]);
    }
}
System.out.println(result.toString());

仅使用char数组的解决方案:

String s1 = "xyaabbbccccdefww", s2 = "xxxxyyyyabklmopq";
String s = s1+s2;
char[] c = s.toCharArray();
java.util.Arrays.sort(c);
char[] result = new char[c.length];
int resultIndex = 0;
for(int i = 0; i<c.length ; i++) {
    boolean isDuplicate=false;
    for(int j = i+1 ; j<c.length; j++) {
        if(c[i]==c[j]) {
            isDuplicate=true;
            break;
        }
    }
    if(!isDuplicate) {
        result[resultIndex++]=c[i];
    }
}
char[] actualResult = new char[resultIndex];
for(int i=0;i<resultIndex;i++) {
    actualResult[i] = result[i];
}
System.out.println(String.valueOf(c));
System.out.println(String.valueOf(result));
System.out.println(String.valueOf(actualResult));

答案 1 :(得分:0)

这是您实现所需目标的方法:

String getDistinctCharacters(String input) {
    String output = "";
    for (int i = 0; i < input.length(); i++) {
        if (output.indexOf(input.charAt(i)) < 0) {
            if ((output.length() == 0) || (output.charAt(0) > input.charAt(i))) {
                output = input.charAt(i) + output;
            } else {
                boolean found = false;
                for (int j = 0; (!found) && (j < output.length()); j++) {
                    if (output.charAt(j) < input.charAt(i)) {
                        found = true;
                        output = output.substring(0, j) + input.charAt(i) + output.substring(j + 1);
                    }
                }
                if (!found) output += input.charAt(i);
            }
        }
    }
    return output;
}