【问题标题】:duplicate characters count in java without using hashmapjava中重复字符计数不使用hashmap
【发布时间】:2018-02-27 19:02:40
【问题描述】:

请帮助我在 java 中使用字符串(或 StringBuffer)编写代码。 请不要使用任何其他数据结构,而不是使用 String 或 StringBuffer。 我得到了答案,但代码从开始重新计算字符,直到它有 0 个字符。 o/p 最后给出,请检查。 提前致谢。

    import java.util.*;

public class DuplicateWordsOcc {
    static Scanner sc = new Scanner(System.in);
    int i,j,k;
    void show(String s,char ch,int n){
        for(i=0;i<s.indexOf(ch);i++){
          if(s.charAt(i)!=ch){
            System.out.println(ch+" : "+n);
          }
        }
    }

    public static void main(String args[]){
        DuplicateWordsOcc ob1 =new DuplicateWordsOcc();
        System.out.println("Enter the string: ");
        String s1 = sc.nextLine();
        String s2 = new String(s1);
            int i,j,k;
            for(i=0;i<s1.length();i++){
                    int count=1;
            for(j=i+1;j<s1.length();j++){
                if(s1.charAt(i)==s1.charAt(j)){
                    count++;
                    ob1.show(s1,s1.charAt(i),count);
                }
            }
        }
    }
}

输出

输入字符串:

你好

l : 2

这是另一个输出

输出

输入字符串:

你好你好你好你好

l : 2

l : 3

l : 4

l : 5

l : 6

l : 7

l : 8

l : 2

l : 3

l : 4

l : 5

l : 6

l : 7

o : 2

o : 2

o : 2

o : 3

o : 3

o : 3

o : 4

o : 4

o : 4

:2

:2

:2

:2

:3

:3

:3

:3

l : 2

l : 3

l : 4

l : 5

l : 6

l : 2

l : 3

l : 4

l : 5

o : 2

o : 2

o : 2

o : 3

o : 3

o : 3

:2

:2

:2

:2

l : 2

l : 3

l : 4

l : 2

l : 3

o : 2

o : 2

o : 2

l : 2

在第二个输出中,请注意粗体字母,这是第一次迭代中显示的真实答案。我想在得到它之后停止执行。

从第一个输出我得出的结论是,超过 count 2 开始出现问题。

我知道问题出在 show() 方法中的 for 循环上,请更正我的代码

请原谅我的英语。

【问题讨论】:

  • A) 尝试使用完整的英文单词,而不是容易让人混淆的速记。 B) 试着举一个minimal的例子。完全不清楚这些东西与什么有关。
  • 感谢您的回复,我将按照 A 部分进行操作。但是为了演示完整的工作并获得所需的答案,我需要进行这个大输出。请阅读输出后的段落并检查我的第二个输出你会得到我所说的。感谢先生的提示。
  • 您始终可以省略部分复制的输出,或者您至少可以通过将其格式化为代码来删除空行。
  • 它不是复制的先生,它是系统生成的。我没有编辑我的输出只是突出显示我得到了所需的输出,但之后它继续计数。为了演示后一个问题,我必须把所有输出。对于前一部分,我突出显示了输出。先生请告诉你擅长java的朋友给出解决方案。我认为你的主要流是Ruby。提前谢谢。
  • 通过以代码的形式格式化输出,我无法突出显示输出中的重要部分,这是主要部分,因为通过推断其他人可以看到我已经得到了输出但没有我需要的方式。如果我放了一个换行符,编译器无法识别它并在同一行打印所有内容,但是如果我放了两个换行符,它会跳过一行。再次感谢您的提示,先生,我将尝试改进,就像您下次说的一样开始。我对这个论坛很陌生。请告诉某人来解决我的问题。

标签: java string indexof string-length charat


【解决方案1】:

修改后的代码如下:

import java.util.*;

public class DuplicateWordsOcc {
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args){
        System.out.println("Enter the string: ");
        String s1 = sc.nextLine();
        s1 = s1.replaceAll("\\s","").toUpperCase();
        int len = s1.length();
        while(len > 0) {
         int count = 1;            
         for(int j=1;j<len;j++){
            if(s1.charAt(0)==s1.charAt(j)){
                count++;
            }
         }
         if (count > 1) {
            System.out.println(s1.charAt(0)+" : "+count);    
         }

         String character = String.valueOf(s1.charAt(0)).trim();
         s1 = s1.replaceAll(character,"");
         len -= count;

       }
    }
}

“他是一个非常优秀的运动员,他会游泳”的输出。是

H : 3
E : 5
I : 2
S : 2
A : 4
O : 2
D : 2
T : 2
N : 2

【讨论】:

  • @ArunHC 我更新了我的代码,因为当我进行替换时,字符串长度每次都在变化,并且我的示例中的“o”字符从未被计算在内。现在每个字符都被计算在内,只显示重复的字符。
  • 它适用于“你好你好”和“狙击手杀手”,这两个句子都有相同的单词数(即第一个有两个 5 个字母的单词,第二个有两个 6 个字母的单词)。请检查。
  • 先生,如果我在句子中使用不同长度的词,例如“他是一个非常好的运动员,他会游泳。”,这将不起作用。请检查。
猜你喜欢
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 2015-04-03
  • 2017-09-27
  • 1970-01-01
  • 2020-08-17
  • 2012-04-11
  • 1970-01-01
相关资源
最近更新 更多