문자 발생 횟수 세기

JavaBeginner
지금 연습하기

소개

Java 에서 문자열 내 특정 문자가 나타나는 횟수를 쉽게 계산할 수 있습니다. 이 랩에서는 문자열 내 문자의 발생 횟수를 세는 데 사용할 수 있는 다양한 방법을 안내합니다.

반복적 접근 방식 (Iterative Approach)

특정 문자가 나타나는 횟수를 세기 위해 문자열의 각 문자를 순회하는 반복적 접근 방식을 사용할 수 있습니다.

~/project 디렉토리에 CountOccurrences.java라는 Java 파일을 생성하고 다음 내용을 파일에 복사합니다.

public class CountOccurrences {

    public static int countChars(String str, char c) {
        int count = 0;

        for(int i = 0; i < str.length(); i++) {
            char currChar = str.charAt(i);
            if(currChar == c)
                count += 1;
        }

        return count;
    }

    public static void main(String[] args) {
        String s = "Java is an awesome language!";
        int charCountOfA = countChars(s, 'a');
        int charCountOfG = countChars(s, 'g');
        int charCountOfE = countChars(s, 'e');

        System.out.println("The String is: " + s);
        System.out.println("Character count of 'a': " + charCountOfA);
        System.out.println("Character count of 'g': " + charCountOfG);
        System.out.println("Character count of 'e': " + charCountOfE);
    }

}

프로그램을 컴파일하고 실행하려면 터미널에서 다음 명령을 실행합니다.

cd ~/project
javac CountOccurrences.java && java CountOccurrences

출력 결과는 다음과 같아야 합니다.

The String is: Java is an awesome language!
Character count of 'a': 6
Character count of 'g': 2
Character count of 'e': 3

재귀적 접근 방식 (Recursion Approach)

문자열 내 문자의 발생 횟수를 세기 위해 재귀적 접근 방식 (recursive approach) 을 사용할 수도 있습니다. 이는 두 개의 메서드를 사용하는 것을 포함하며, 첫 번째 메서드는 재귀적이고 두 번째 메서드는 첫 번째 메서드를 호출합니다.

CountOccurrences.java 파일의 Step 1 코드 블록 뒤에 다음 코드 블록을 복사하여 붙여넣습니다.

public static int countCharsRecur(String str, char c, int idx) {
    if(idx >= str.length())
        return 0;
    else {
        int count = 0;
        if(str.charAt(idx) == c)
            count = 1;
        return count + countCharsRecur(str, c, idx + 1);
    }
}

public static int countChars(String s, char c) {
    return countCharsRecur(s, c, 0);
}

업데이트된 프로그램을 컴파일하고 실행하려면 Step 1 과 동일한 명령을 실행합니다.

cd ~/project
javac CountOccurrences.java && java CountOccurrences

Java 8 스트림 사용법 (Java 8 Streams)

Java 8 Streams 을 사용하여 문자열 내 문자의 발생 횟수를 셀 수 있습니다.

CountOccurrences.java 파일의 Step 2 코드 블록 뒤에 다음 코드 블록을 복사하여 붙여넣습니다.

public static void usingStreams(String s) {
    int charCountOfA = (int) s.chars().filter(c -> c == 'a').count();
    int charCountOfG = (int) s.chars().filter(c -> c == 'g').count();
    int charCountOfE = (int) s.chars().filter(c -> c == 'e').count();

    System.out.println("The String is: " + s);
    System.out.println("Character count of 'a': " + charCountOfA);
    System.out.println("Character count of 'g': " + charCountOfG);
    System.out.println("Character count of 'e': " + charCountOfE);
}

Java 8 Streams 메서드를 사용하려면 main 메서드의 Step 2 코드 블록 뒤에 다음 코드 줄을 추가합니다.

usingStreams(s);

업데이트된 프로그램을 컴파일하고 실행하려면 Step 1 과 동일한 명령을 실행합니다.

cd ~/project
javac CountOccurrences.java && java CountOccurrences

외부 라이브러리 사용 (External Libraries)

문자열 내 문자의 발생 횟수를 세기 위해 외부 라이브러리를 사용할 수 있습니다.

Guava 라이브러리 사용

Guava 라이브러리는 주어진 문자의 발생 횟수를 셀 수 있는 CharMatcher 클래스를 제공합니다.

Step 3 코드 블록 뒤에 다음 코드 블록을 추가합니다.

public static int usingGuava(String str) {
    CharMatcher cm = CharMatcher.is('a');
    int charCountOfA = cm.countIn(str);

    System.out.println("Character count of 'a': " + charCountOfA);
    return charCountOfA;
}

Guava 라이브러리를 사용하려면 CountOccurrences.java 파일의 맨 위에 다음 import 문을 추가합니다.

import com.google.common.base.CharMatcher;

main 메서드에서 문자열 매개변수를 사용하여 usingGuava 메서드를 호출합니다.

usingGuava(s);

업데이트된 프로그램을 컴파일하고 실행하려면 Step 1 과 동일한 명령을 실행합니다.

cd ~/project
javac -cp ".:./lib/*" CountOccurrences.java && java -cp ".:./lib/*" CountOccurrences
Apache 라이브러리 사용

Apache Commons 라이브러리는 문자와 문자열을 입력으로 받아 해당 문자열 내 문자의 횟수를 반환하는 편리한 countMatches() 메서드를 가진 StringUtils 클래스를 제공합니다.

Step 4 코드 블록 뒤에 다음 코드 블록을 추가합니다.

public static int usingApache(String str) {
    int charCountOfA = StringUtils.countMatches(str, 'a');
    int charCountOfG = StringUtils.countMatches(str, 'g');
    int charCountOfE = StringUtils.countMatches(str, 'e');

    System.out.println("Character count of 'a': " + charCountOfA);
    System.out.println("Character count of 'g': " + charCountOfG);
    System.out.println("Character count of 'e': " + charCountOfE);

    return charCountOfA;
}

Apache Commons 라이브러리를 사용하려면 CountOccurrences.java 파일의 맨 위에 다음 import 문을 추가합니다.

import org.apache.commons.lang3.StringUtils;

main 메서드에서 문자열 매개변수를 사용하여 usingApache 메서드를 호출합니다.

usingApache(s);

업데이트된 프로그램을 컴파일하고 실행하려면 Step 1 과 동일한 명령을 실행하되, classpath 를 추가합니다.

cd ~/project
javac -cp ".:./lib/*" CountOccurrences.java && java -cp ".:./lib/*" CountOccurrences

요약

이 랩에서는 다음 단계를 다루었습니다.

  1. 반복적 접근 방식 (Iterative Approach) - 각 문자를 순회하여 문자의 발생 횟수를 계산합니다.
  2. 재귀적 접근 방식 (Recursive Approach) - 재귀를 사용하여 문자의 발생 횟수를 계산합니다.
  3. Java 8 Streams - Streams 을 사용하여 문자의 발생 횟수를 계산합니다.
  4. 외부 라이브러리 (External Libraries) - Guava 및 Apache 라이브러리를 사용하여 문자의 발생 횟수를 계산합니다.

이 랩을 완료하면 문자열 내 문자의 발생 횟수를 계산하는 다양한 방법에 대한 이해도가 높아질 것입니다.