2017-06-23 14 views
2
int[] buildCharFreqTable(string phrase){ 
    int[] tab = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1]; 
    for (char c : phrase.toCharArray()) { 
     int x = getCharNumber(c); 
     if (x != -1){ 
      tab[x]++; 
     } 
    } 
    return tab; 
} 

これは、各文字がフレーズに何回表示されるかをカウントする関数です。しかし、私はCharacter.getNumericvalue in char頻度テーブル

int[] tab = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1]; 

は、この行が何をするのラインを理解していないと、なぜ我々は、事前に

Character.getNumericValue('z') - Character.getNumericValue('a') + 1 

感謝を使用する必要があります。この行は配列を作成しようとしている

+1

この方法を使用する必要はありません。それが何であるかについては、[ドキュメンテーション](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#getNumericValue-char-)と相談していますか? – VGR

答えて

2

ました各文字 'a'〜 'z'のインデックスを持ちます。 Javaは、Javaが他の文字に使用するUnicodeとは異なり、実際には同じ数字を使用するすべての英字の変種をエンコードします。 'A'と 'a'は両方とも10に対応し、 'B'と 'b'は両方とも11に対応します。つまり、大文字と小文字を区別せずに英語のアルファベットの各文字をカウントするには、1文字あたり1つのインデックスを持つ配列を作成し、表示される各文字に対応するインデックスの値を増やすことができます。行

int[] tab = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1]; 

サイズValue of 'z' - Value of 'a' + 1の新しい配列を作成します。 javaでは、英字はアルファベット順の数値で与えられているので、 'a'は10で、 'z'は35です。これにより、配列のサイズは英語アルファベットの文字数である35-10+1または26になります。これは、単純にサイズ26の配列を作成するよりも、配列を作成するのに適した方法です。 'a'と 'z'ではなく、 '0'から '9'までの文字を1行に数えたい場合はどうなりますか?単に 'a'と 'z'を '0'と '9'に変更するか、変数として渡すことができます。