2016-10-19 3 views
1

Я искал и нашел некоторые подобные вопросы, но просто не могу понять, как применить их к моей проблеме. Пожалуйста, несите меня, так как это мой первый пост на сайте.Как узнать, сколько раз каждый символ строки 'повторяется сам?

Мне нужно выяснить, сколько раз символ строки повторяется. Например, если данный "launch at noon", метод должен напечатать:

"l" appears once in "launch at noon". 
"a" appears twice in "launch at noon". 
"u" appears once in " launch at noon ". 
"n" appears 3 times in "launch at noon". 
"c" appears once in "launch at noon". 
"h" appears once in "launch at noon". 
" " appears twice in "launch at noon". 
"t" appears once in "launch at noon". 
"o" appears twice in "launch at noon". 
+0

Можете ли вы поделиться код, который вы уже сделали? Или идея, как это решить? – Flummox

+0

'String.charAt',' String.length', 'for loop'. Это все, что вам нужно. –

+0

до где у вас есть кодирование? какой-либо прогресс? –

ответ

0
public void test() { 
    // The string to test. 
    String s = "launch at noon"; 
    // Count them. 
    Map<Character, Integer> characterCounts = countCharacters(s); 
    // Print the results. 
    for (Map.Entry<Character, Integer> e : characterCounts.entrySet()) { 
     int count = e.getValue(); 
     // Work out the name for the number. 
     String number = count < specials.length 
       // The special short ones. 
       ? specials[count] 
       // Is it a general one? 
       : count < numbersAsWords.length 
       // Yes 
       ? numbersAsWords[count] + " times" 
       // Way too many. 
       : "too many times"; 
     // Print it. 
     System.out.println("\"" + e.getKey() + "\" appears " + number + " in \"" + s + "\"."); 
    } 
} 

private Map<Character, Integer> countCharacters(String s) { 
    // Map from character in string to count of occurrences. 
    Map<Character, Integer> counts = new HashMap<>(); 
    // Walk the string. 
    for (int i = 0; i < s.length(); i++) { 
     // Get character at that point. 
     char ch = s.charAt(i); 
     // What's in the map for that character. 
     Integer count = counts.get(ch); 
     if (count == null) { 
      // Not seen this character before - start at zero. 
      count = 0; 
     } 
     // Increment seen count. 
     count += 1; 
     // Put it back in the map. 
     counts.put(ch, count); 
    } 
    return counts; 
} 

// The short ones. 
private static final String[] specials = {"not at all", "once", "twice"}; 

// The rest. 
private static final String[] numbersAsWords = {"zero", 
     "one", 
     "two", 
     "three", 
     "four", 
     "five", 
     "six", 
     "seven", 
     "eight", 
     "nine", 
     "ten", 
     "eleven", 
     "twelve", 
     "thirteen", 
     "fourteen", 
     "fifteen", 
     "sixteen", 
     "seventeen", 
     "eighteen", 
     "nineteen", 
     "twenty", 
     "twenty-one", 
     "twenty-two", 
     "twenty-three", 
     "twenty-four", 
     "twenty-five", 
     "twenty-six", 
     "twenty-seven", 
     "twenty-eight", 
     "twenty-nine", 
     "thirty", 
     "thirty-one", 
     "thirty-two", 
     "thirty-three", 
     "thirty-four", 
     "thirty-five", 
     "thirty-six", 
     "thirty-seven", 
     "thirty-eight", 
     "thirty-nine", 
     "forty", 
     "forty-one", 
     "forty-two", 
     "forty-three", 
     "forty-four", 
     "forty-five", 
     "forty-six", 
     "forty-seven", 
     "forty-eight", 
     "forty-nine", 
     "fifty", 
     "fifty-one", 
     "fifty-two", 
     "fifty-three", 
     "fifty-four", 
     "fifty-five", 
     "fifty-six", 
     "fifty-seven", 
     "fifty-eight", 
     "fifty-nine", 
     "sixty", 
     "sixty-one", 
     "sixty-two", 
     "sixty-three", 
     "sixty-four", 
     "sixty-five", 
     "sixty-six", 
     "sixty-seven", 
     "sixty-eight", 
     "sixty-nine", 
     "seventy", 
     "seventy-one", 
     "seventy-two", 
     "seventy-three", 
     "seventy-four", 
     "seventy-five", 
     "seventy-six", 
     "seventy-seven", 
     "seventy-eight", 
     "seventy-nine", 
     "eighty", 
     "eighty-one", 
     "eighty-two", 
     "eighty-three", 
     "eighty-four", 
     "eighty-five", 
     "eighty-six", 
     "eighty-seven", 
     "eighty-eight", 
     "eighty-nine", 
     "ninety", 
     "ninety-one", 
     "ninety-two", 
     "ninety-three", 
     "ninety-four", 
     "ninety-five", 
     "ninety-six", 
     "ninety-seven", 
     "ninety-eight", 
     "ninety-nine", 
     "one hundred", 
}; 
Смежные вопросы