重复字符在java中计数而不使用hashmap

问题描述 投票:0回答:1

请帮我在java中使用string(或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

或者:3

或者:3

或者:3

或者:4

或者:4

或者: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

或者:3

或者:3

或者:3

: 2

: 2

: 2

: 2

l:2

l:3

l:4

l:2

l:3

o:2

o:2

o:2

l:2

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

从第一次输出我得出结论,超过计数2开始出问题。

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

请原谅我的英语

java string indexof string-length charat
1个回答
2
投票

这是修改后的代码:

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
© www.soinside.com 2019 - 2024. All rights reserved.