-1

我有以下代码。我想要做的是计算特定字符的频率,但我无法做到。任何人都可以提供任何提示吗?

import java.io.*;
import java.lang.*;
public class Mywork {

    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {
        // TODO code application logic here
        try {
            String str;
            System.out.println("Enter a String:");
            DataInputStream d=new DataInputStream(System.in);
            str=d.readLine();
            int count=0;
            System.out.println("You Entered  "+str);
            char a[]=new char[str.length()];
            int i=0;
            System.out.println("enetr the characte of which frequency is to be count:");
            char c=(char)d.read();
            System.out.println("you entered "+c);
            while(str!=null){
                if(str.charAt(i)==c){
                    count++;
                } else {
                    i++;
                }
                i++;
            }   
            System.out.println("Frequency of character "+c+"is "+count);
        } catch(Exception e){
            System.out.println("I/O Error");
        }
    }
}
4

3 回答 3

1

用这个

public static int countOccurance(String inputString, String key) {
    int index = 0;
    int fromIndex = 0;
    int result = 0;

    if (inputString == null || key == null) {
        return 0;
    }

    while ((index = inputString.indexOf(key, fromIndex)) != -1) {
        result++;
        fromIndex = index + key.length;
    }
    return result;
}
于 2012-06-28T06:12:56.460 回答
1

在您的循环中,您不需要 else 部分。

 while(i < str.length()){
     if(str.charAt(i)==c){
         count++;
     } 
     i++;
 }   

还需要按照 Thrustmaster 的建议将 str!=null 更改为 i < str.length()

只是好奇你为什么使用 DataInputStream.readLine。我看到它已被弃用。

于 2012-06-28T06:56:37.503 回答
0

条件是检查是否i仍然小于字符串的长度(即最后一个索引+1)。所以,更换

while(str!=null)

while (i < str.length())
于 2012-06-28T06:13:26.357 回答