从字符串中获取不同的字符

Getting distinct characters from a string

我知道现在有更简单的方法来解决这个问题陈述。但这是我尝试过但无法调试的东西。

这是我的代码。

String str="java is a programming language";
int flag=0,k=0;
char unique[]=new char[256];
for(int i=0;i<str.length();i++){
  for(int j=i+1;j<str.length();j++){
    if(str.charAt(i)==str.charAt(j))
        flag++;
  }
  System.out.println(flag); //printing flag values
  if(flag==0){
     unique[k]=str.charAt(i);
     System.out.println(unique[k]); //printing array values
     k++;
  }
}

这是我的输出。

Enter the sentence:
java is a programming language
0
j
5
5
9
12
13
13
15
18
19
19
20
20
23
23
25
26
26
26
27
29
29
29
30
30
31
31
31
31
31
Unique characters:
j

我想了解这些数值是从哪里打印出来的。我确信打印标志值和数组值会给我个位数。这些两位数是多少?

您只需重置计数器(标志),然后再在下一次迭代中添加它。

flag=0;
for(int j=i+1;j<str.length();j++){
if(str.charAt(i)==str.charAt(j))
    flag++;
}

您的代码存在以下问题:

  1. 不重置 flag 的值。
  2. i 的每个值打印 flag 而您只想在找到唯一字符时打印它。
  3. 您正在从 i + 1 开始循环 j,这样,您将无法比较索引 i + 1.
  4. 之前的字符

您可能还想做的一些其他事情是:

  1. 仅过滤非空白字符。
  2. 仅打印数组到 k 的值。
  3. 未将 unique[] 的大小固定为 256。如果 str 中的所有字符都是唯一的,则 unique[] 所需的大小将等于 str 的长度。因此,unique[] 的最大要求大小等于 str.length()。但是,如果大小需要动态,最好使用 List

按如下方式存储和打印唯一字符:

public class Main {
    public static void main(String[] args) {
        String str = "java is a programming language";
        int flag, k = 0;
        char unique[] = new char[str.length()];// This array can have a maximum length equal to the length of str

        for (int i = 0; i < str.length(); i++) {
            flag = 0;
            for (int j = 0; j < str.length(); j++) {
                if (i != j && str.charAt(i) == str.charAt(j)) {
                    flag++;
                }
            }
            if (flag == 0 && !String.valueOf(str.charAt(i)).isBlank()) {
                unique[k] = str.charAt(i);
                k++;
            }
        }
        System.out.print("Unique characters: ");
        for (int i = 0; i <= k; i++) {
            System.out.print(unique[i] + (i < k - 1 ? "," : "\n"));
        }
    }
}

输出:

Unique characters: j,v,s,p,o,l,u,e
String str="java is a programming language";
int flag=0,k=0;
char unique[]=new char[256];
for(int i=0;i<str.length();i++){
  flag = 0;
  for(int j=i+1;j<str.length();j++){
    if(str.charAt(i)==str.charAt(j))
        flag++;
  }
  System.out.println(flag); //printing flag values
  if(flag==0){
     unique[k]=str.charAt(i);
     System.out.println(unique[k]); //printing array values
     k++;
  }
}