要数不了。字符串中出现char的次数

时间:2014-09-24 09:40:27

标签: java string

我已经完成了这个

public static void main(String[] args) {

 int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i1=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z = 0;

/初始化变量并计算每次匹配./

    System.out.println("enter the string");
    Scanner sc= new Scanner(System.in);
    String s1=sc.nextLine();

/我从用户

获取字符串作为i / p
    int a = 0;
  for(int i=0;i<(s1.length());i++)
    {
        if (s1.charAt(i)=='a')

        {
            a++;
        }
         if (s1.charAt(i)=='b')

        {
            b++;
        } if (s1.charAt(i)=='c')

        {
            c++;
        } if (s1.charAt(i)=='d')

        {
            d++;
        } if (s1.charAt(i)=='e')

        {
            e++;
        } if (s1.charAt(i)=='f')

        {
            f++;
        } if (s1.charAt(i)=='g')

        {
            g++;
        } if (s1.charAt(i)=='h')

        {
            h++;
        }

        if (s1.charAt(i)=='i')

        {
            i1++;
        }            
        if (s1.charAt(i)=='j')

        {
            j++;
        } if (s1.charAt(i)=='k')

        {
            k++;
        } if (s1.charAt(i)=='l')

        {
            l++;
        } if (s1.charAt(i)=='m')

        {
            m++;
        } if (s1.charAt(i)=='m')

        {
            m++;
        } if (s1.charAt(i)=='n')

        {
            n++;
        } if (s1.charAt(i)=='o')

        {
            o++;
        } if (s1.charAt(i)=='p')

        {
            p++;
        } if (s1.charAt(i)=='q')

        {
            q++;
        } if (s1.charAt(i)=='r')

        {
            r++;
        } if (s1.charAt(i)=='s')

        {
            s++;
        } if (s1.charAt(i)=='t')

        {
            t++;
        } if (s1.charAt(i)=='u')

        {
            u++;
        } if (s1.charAt(i)=='v')

        {
            v++;
        } if (s1.charAt(i)=='w')

        {
            w++;
        }
         if (s1.charAt(i)=='x')

        {
            x++;
        } if (s1.charAt(i)=='y')

        {
            y++;
        } if (s1.charAt(i)=='z')

        {
            z++;
        }

  /...................................adkjagkdgakjdjakdjg/

          }

但是不可能再次为打印再写整个26个变量...请给我另一个选项。

9 个答案:

答案 0 :(得分:2)

最好的方法是使用int 26元素数组。让我们初始化26个元素的数组: -

int[] array=new int[26];

现在可以认为0th元素是a1st元素是b,依此类推。现在假设我们有字符串str。现在迭代字符串到它的结尾。

for(int i=0;i<str.length();i++)
{
    array[str.charAt(i)-'a']++;    //Storing occurrence of characters in array
}

现在我们在数组中出现了字符,只是迭代array得到所有值的打印。

for(int i=0;i<26;i++)
{
    char ch=(char)('a'+i);
    System.out.println(ch+":"+array[i]);
}

或者,如果您只想打印出现的字符: -

for(int i=0;i<26;i++)
{
    char ch=(char)('a'+i);
    if(array[i]>0)
    System.out.println(ch+":"+array[i]);
}

答案 1 :(得分:0)

您可以尝试使用Map

String str = "occurrences";
Map<String, Integer> map = new HashMap<>();
 for (char i : str.toCharArray()) {
    Integer value = map.get(i + "");
      if (value != null) {
         map.put(i + "", value + 1);
      } else {
         map.put(i + "", 1);
      }
 }

的System.out.println(地图);

Out put:

{u=1, e=2, s=1, r=2, c=3, n=1, o=1}

答案 2 :(得分:0)

如评论中所述,如果您想要将唯一键与值(在您的情况下,字符及其出现次数)相关联,则Map<Character,Integer>是正确的选择。

有很多网站教你如何使用地图。 Here's one for starters。我不会用勺子喂你代码,因为你显然是想学习。

答案 3 :(得分:0)

根据评论中的建议,请使用Map

例如:

System.out.println("enter the string");
Scanner sc= new Scanner(System.in);
String s1=sc.nextLine();
if (s1 != null && !s1.isEmpty()) {
    // will display character counts alphabetically
    Map<Character, Integer> count = new TreeMap<Character, Integer>();
    char[] chars = s1.toCharArray();
    for (char c: chars) {
        // no count yet for this character
        if (count.get(c) == null) {
            count.put(c,  1);
        }
        // this character appeared at least once: incrementing count
        else {
            count.put(c,  count.get(c) + 1);
        }
    }
    System.out.println(count);
}

<强>输出

enter the string
abcdeff
{a=1, b=1, c=1, d=1, e=1, f=2}

答案 4 :(得分:0)

HashMap<Character, Integer> charCountMap = new HashMap<Character, Integer>;  

 for(int i=0;i<(s1.length());i++)
 {
  Integer count = charCountMap(s1.charAt(i));
   if(count == null){
     charCountMap.put(1);
   } else {
     charCountMap.put(++count);
   }
 }

获取a:

的出现次数
 int count = charCountMap.get('a');

答案 5 :(得分:0)

您可以使用ascii值来实现这一目标。

    String s;

    int[] arr = new int[26];

    for(char x : s.toLowerCase().toCharArray()){
        arr[x-97]++;
    }
    for(int i=0; i<arr.length; i++){

        System.out.println("Count of "+(char)(97+i)+" :"+arr[i]);

    }

答案 6 :(得分:0)

    int[] array = new int[256];
    String str = "sdfdagfvdsgfrewfwqafasfdfa";
    for (int i = 0; i < str.length(); i++) {
        array[str.charAt(i)]++;
    }
    for (int i = 'a'; i <= 'z'; i++) {
        if (array[i] > 0) {
            System.out.println((char) i + ":" + array[i]);
        }
    }

答案 7 :(得分:0)

使用2D数组可以执行以下操作

公共类计数器{

private String[][] letterArray;

Counter(){
    String letter = "abcdefghijklmnopqrstuvwxyz";
    letterArray = new String[26][2];

    for(int i = 0; i < letterArray.length; i++){
        letterArray[i] = new String[]{letter.charAt(i)+ "", "0"};
    }
}

void setLetterCount(String sentence){
    for(int i = 0; i < sentence.length(); i++){
        String ch = sentence.charAt(i)+"";
        for(int x = 0; x < letterArray.length; x++){
            String letter = letterArray[x][0].toLowerCase();
            int num = Integer.parseInt(letterArray[x][1].toString());
            if (letter.equals(ch)){
                letterArray[x][1] = ++num+"";
                continue;
            }
        }
    }
}

void printLetters(){
    for(String arr[] : letterArray){
        System.out.println(arr[0]+ " : "+ arr[1]);
    }
}

}

公共类CounterApp {

public static void main(String[] args) {

    Scanner sc= new Scanner(System.in);
    Counter counter = new Counter();

    System.out.print("Enter the sentence : ");
    String sentence=sc.nextLine();

    counter.setLetterCount(sentence);
    counter.printLetters();
}

}

答案 8 :(得分:0)

没有2D数组

公共课LetterCounter {

public static void main(String[] args) {

    Scanner sc= new Scanner(System.in);

    System.out.print("Enter the sentence : ");
    String sentence=sc.nextLine().toLowerCase();

    int arr[] = new int[26];

    for(int i = 0; i < sentence.length(); i++){
        char ch = sentence.charAt(i);
        int num = ((int)ch) - 97;
        arr[num] = arr[num] + 1;
    }

    int ch = 97;
    for(int i : arr){
        if(i > 0) {
            System.out.println(((char)ch)+ " : "+ i);
        }
        ch++;
    }

}

}