0
package opop;

import java.util.Scanner;

public class Domashnoto {

    static public void main(String[] args){

        Scanner input = new Scanner(System.in);
        System.out.println("Text:");
        String s = input.next();

        s = s.toLowerCase();
        s = s.replaceAll("[^A-Za-z]+", "");
        s.replaceAll("\\s+", "");


        int j;
        int i;

        for (j = 0 ; j <= s.length() ; j++){
            int counter = 0;
             for (i = 0 ; i <= s.length(); i++){
                if(s.charAt(i) == s.charAt(j)){

                    counter++;
                }
            }
            System.out.println(s.charAt(i) + " " + "-" + " " + counter);
        }



    }

}

ヘルプ!何がダメなのかわからない

4

2 に答える 2

1

最速のアプローチ (65536 の異なる文字しか存在できないためのみ機能します:

public static void main(String[] args) {
    String s = "asdfasdfasasasasa";
    int[] counters = new int[65536];

    for (char c: s.toCharArray()) ++counters[c];
    for (int i = 0; i < counters.length; ++i) {
      if (counters[i] > 0) System.out.println((char)i + " - " + counters[i]);
    }
}
于 2013-10-18T22:14:04.083 に答える
1

ループに対する2 つの<= s.length()テストは< s.length().

System.out.println(s.charAt(i)...ループはその時点で終了しているSystem.out.println(s.charAt(j)...ため、 である必要があります。i

このステートメント:s.replaceAll("\\s+", "");は、結果を に代入しないため、何もしませんs。文字列からスペースを削除しますが、上記の行でアルファベット以外の文字がすべて削除されているため、問題はありません。

これらの最初のいくつかを修正すれば、機能します。


ただし、少しクリーンで、同じ文字を繰り返し報告することを回避する完全に代替のアプローチとして、次のように、文字をその頻度の整数カウントにマップするマップを使用できます。

Map<Character,Integer> charMap = new HashMap<>();
for (char c : s.toCharArray()) {
    if (!charMap.containsKey(c)) {
        charMap.put(c, 1);
    } else {
        charMap.put(c, charMap.get(c) + 1);
    }
}

文字列の各文字 ( ) を反復cし、マップにその文字がまだ含まれていない場合は頻度を割り当て、1含まれている場合は前の頻度を取得し、1 を追加して元に戻します。

次に、マップを反復して頻度を表示できます。

for (char c : charMap.keySet()) {
    System.out.println(c + " - " + charMap.get(c));
}

そのHashMapからの文字の順序は、基本的にランダムになります。これを LinkedHashMap に変更して各文字の最初の出現順序を保持するか、 TreeMapに変更してアルファベット順に並べ替えることができます。

(PS このアプローチを使用するにはimport java.util.*;、特定のクラスをインポートまたはインポートする必要もあります。)

于 2013-10-18T22:04:12.497 に答える