2012-07-07 5 views
-2

나는 =이 문자열을 문자열이 "aaaaaaaaadddsssaaakkaaaaand"은 내가, 내가 에서 유래이 코드를 발견 거기에 어떤 문자와 그 발생을 계산 알아야하지만 난 사용자에게 묻지 않고 문자를 계산해야하기 때문에 그것은 도움이 아니에요 하나를 입력하십시오.문자열에 어떤 문자가 있는지 어떻게 알 수 있습니까?

public static int countOccurrences(String haystack, char needle) 
{ 
    int count = 0; 
    for (int i=0; i < haystack.length(); i++) 
    { 
     if (haystack.charAt(i) == needle) 
     { 
      count++; 
     } 
    } 
    return count; 
} 

나는 5 a와 4 v가 있다는 것을 알 수있는 방법이 필요합니다.

+2

이 숙제가 있습니까? –

+0

이것은 숙제와 같습니다. 보고 해결책을 묻는 대신 자신을 찾으십시오. 이 문제를 해결하도록 요청 받기 전에 데이터 구조와 컬렉션에 대해 알게되었습니다. –

+0

사람들은 왜 문자 집합을 항상 잊어 버리는가? –

답변

1

이 방법이 유용할까요?

public static Map<Character, Integer> countOccurrences(String haystack) 
{ 
    Map<Character, Integer> count = new HashMap<Character, Integer>(); 
    for (int i=0; i < haystack.length(); i++) 
    { 
     char c = haystack.charAt(i); 
     Integer charCount = count.get(c); 
     if(charCount == null) { 
      count.put(c, 1); 
     } else { 
      count.put(c, charCount + 1); 
     } 
    } 
    return count; 
} 
+0

당신은 당신의 메소드를 int를 리턴한다고 선언했지만 실제로는 Map '를 리턴합니다. 그게 효과가 없을 수도 있습니다. –

+0

@DonRoby : 고마워, 고정, 실제로 Keppil은 편집을 제안했다. 내 두뇌 유기 컴파일러가 실패했습니다. –

1

문자열의 모든 문자 수를 계산해야합니까? 이 같은 것을 할 거라고,

public class CharCounter { 

    private final int[] counts = new int[Character.MAX_VALUE]; 

    public CharCounter(String input) { 
    for (int i = 0; i < input.length(); i++) { 
     counts[input.charAt(i)] += 1; 
    } 
    } 

    public int getCount(char c) { 
    return counts[c]; 
    } 
} 

그것을 사용하려면 : 그렇다면, 이런 클래스는 작동 할 수 있습니다

CharCounter counter = new CharCounter("hello world"); 
System.count.println("number of 'l' characters: " + counter.getCount('l')); 
1

내가 당신에게 코드 대답을하지 않을거야,하지만이

  1. 당신은 빈 배열 (또는 ArrayList를) 문자 및 빈 문자열이 필요하고, 물론, 문자열 (건초 더미) "을 계산하는"당신을 얻을해야 다른 아이디어는 시작했다.
  2. 건초 더미를 거치고 정렬 방법을 사용하여 알파벳순으로 (이걸보세요, 너무 열심히하지는 않습니다)을 정렬하십시오.
  3. 당신이 알파벳 순으로 분류하면, 새로운, 알파벳 순으로 정렬 문자열을 통과 루프 다른 작업을 수행하고 위치에있는 문자 내가 + 1이 아닌 경우 문자 의 빈 배열로에게 새로운 캐릭터를 추가 그 전에 그것과 같은. 자, 이 루프의 끝에, 그 문자 배열은 원본 문자열의 다른 문자의 작은 목록을 가지고 있습니다!
  4. 아직 ANOTHER for loop ... 이것이 마지막 것입니다. 이번에는 for 루프 안에 for 루프가 될 것입니다. 바깥 쪽 for 루프는 새로운 문자 배열을 통과 할 것이고 안쪽 루프는 원래 String의 문자를 순환 할 것입니다. 이제 문자 배열의 첫 번째 문자가 몇 번 왔는지, 두 번째, 세 번째, 네 번째 ... 등을 세어 볼 수 있습니다. 매번 "5 a 's" "6 b 's"등을 인쇄 할 수 있습니다

이렇게하면됩니다. 알려줘!

+0

나는 이것이 정말로 도움이된다고 생각한다. –

관련 문제