我试图按字母顺序打印字符串的不同字符,这是其他两个字符串串联的结果。我尝试过,但是我得到的是小方盒作为输出。这是我的代码:
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));
我得到这样的输出:
但是我想要一个输出:
abcdefklmopqwxy
答案 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;
}