TextAnalyzer、テキスト中のアルファベットの出現回数、パーセンテージなどを分析する

2543 ワード

たまたまこの宿題をする学生は控えめに参考にしてください.


public class TextAnalyser {

	private int total=0;
	private int[] charCount = new int[26]; //this array stores number of chars
	
	
	
	public TextAnalyser()
	{
		
	}
	
	public TextAnalyser(String initial)
	{
		
		this.analyse(initial);
	}
	
	public void analyse(String str)
	{
		//restore all chars to lower case
		str = str.toLowerCase(); 
		
		//index of current letter
		int index = 0;
		
		//letters number
		for(int i=0;i<str.length();i++)
		{
			char ch = str.charAt(i);
			if(Character.isLetter(ch))
			{
				total++;
			}
		}		
		
		//count the char number
		for(char charInitial = 'a';charInitial<=(char)('a'+25);charInitial++)
		{
			for(int i=0;i<str.length();i++)
			{
				char ch = str.charAt(i);
				if(charInitial==ch)
				{
					charCount[index]++;
				}
				
			}	
			index++;
		}
		
	}
	
	public int charsAnalysed()
	{
		return total;
	}
	
	public int frequency(char c)
	{
		c = Character.toLowerCase(c);
		return charCount[getCharIndex(c)];
	}
	
	
	public double percentage(char c)
	{
		c = Character.toLowerCase(c);
		
		double percentage = 0.0;
		
		if(total==0||frequency(c)==0)
			return 0.0;
		
		percentage = (double)frequency(c)/total*100;
		
		return percentage;
		
	}
	
	public char mostFrequent()
	{
		if(total==0)
			return '?';
		
		int maxCount=0;
		int index = 0;
		char mostFrequentChar = '?';
		for(char charInitial = 'a';charInitial<=(char)('a'+25);charInitial++)
		{
			if(charCount[index]>=maxCount)
			{
				maxCount=charCount[index];
				mostFrequentChar=charInitial;
			}
			index++;
		}
		
		return mostFrequentChar;
	}
	
	public void clear()
	{
		total = 0;
		charCount = new int[26];
	}
	
	
	
	
	
	//private helper methods
	
	//return the index of given char of charCount array
	private int getCharIndex(char ch)
	{
		return ch-'a';
	}
	
	
}