2017-03-19 14 views
0

これはちょっと分かりにくいかもしれません。Java - 名前を文字列として変数を変更する方法

文字列内のすべての文字を数え、最終的にすべての文字数を出力しようとしています。ループ内の文字数を変更する方法を知りたいと思います。

現在、それはこのように書きます:

for (int i = 0; i<line.length();i++){ 
    line.charAt(i)++; 
} 

私は、彼らそれぞれがのように、表す1つの文字としてすべての変数名があります。 int型、A = 0、B = 0、C = 0、Dを= 0、e = 0、f = 0など

この場合、++演算子はどのように使用しますか? line.charAt(iter)は私に文字を与えますが、その文字をどのように変数として使用しますか?

+0

これがJavaの質問であれば、C#としてタグ付けしないでください。 – Abion47

+1

文字列ではなく変数の数を増やす必要があります。変数の代わりに[HashMap](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html)を使用することをお勧めします。 – Guy

答えて

0

これはできません。

正しく行うには、Mapを使用してください。すべての文字をタイプMap<Character, Integer>のマップに保存します。そして、あなたはこのような値を更新することができます

// assumming your data looks like this: 
Map<Character, Integer> map = new HashMap<>(); 
map.put('a', 0); 
map.put('b', 0); 
// etc..., you should probably init these in a loop 


// then you can do 
for (int i = 0; i<line.length();i++){ 
    map.compute(line.charAt(i), i -> i+1); 
} 
0

あなたはintアレイを使用してカウントを集めることができました。

int[] counts = new int[256]; 
for (int i = 0; i < line.length(); i++){ 
    counts[line.charAt(i)]++; 
} 
a = counts['a']; 
b = counts['b']; 
... 
0

あなたは小文字のみを扱っている場合は、古い学校「Cスタイル」アプローチのためにカウントの配列を保つことができます:あなたのループで、その後

int[] counts = new int[26]; 

counts[line.charAt(i) - 'a']++; 


代わりに、より簡単に、1行の方法があります

Map<Integer, Long> frequency = line.chars().boxed().collect(Collectors.groupingBy(i -> i, Collectors.counting())); 

マップのキーは、charの整数値です。

関連する問題