【问题标题】:Getting distinct characters from a string从字符串中获取不同的字符
【发布时间】:2020-07-25 09:24:47
【问题描述】:

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

这是我的代码。

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

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

【问题讨论】:

  • System.out.println(flag);,您正在打印由flag 持有的值,但由于您从未将它从以前的迭代中保存的每个字符重置为0。
  • “我知道有一种更简单的方法可以解决这个问题”:s.chars().distinct().mapToObj(i -&gt; (char) i).forEach(System.out::println).

标签: java string character


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您的代码存在以下问题:

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

    您可能还想做一些额外的事情:

    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
    

    【讨论】:

      【解决方案3】:
      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++;
        }
      }
      

      【讨论】:

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