원본 글: https://www.baeldung.com/java-count-chars
String 문자열안에 존재하는 특정 문자의 숫자 갯수를 셀 방법은 많습니다.
이 글에서는 해당 방법을 다룹니다.
1. Using Core Java Lib
1.1 Imperative Approach
일부 개발자들은 Java API만을 사용하는 방식을 선호합니다.
간단하게 접근이 가능합니다.
@Test
public void java_core_simple_test() {
String someString = "elephant";
char someChar = 'e';
int count = 0;
for(int i = 0; i< someString.length(); ++i) {
if(someString.charAt(i) == someChar) {
count++;
}
}
Assertions.assertEquals(2, count);
}
1.2 Using Recursion
위보다는 직관적이지 않지만 재귀를 사용해서 확인할 수도 있습니다.
@Test
public void recursion_test() {
String someString = "elephant";
char someChar = 'e';
int count = 0;
Assertions.assertEquals(2, useRecursion(someString, someChar, count));
}
1.3 Using Regular Expressions
정규 표현식으로도 가능합니다.
@Test
public void recursion_test() {
String someString = "elephant";
char someChar = 'e';
int count = 0;
Assertions.assertEquals(2, useRecursion(someString, someChar, count));
}
여러 케이스에 대응하기엔 정규표현식은 복잡하게 작성할 수도 있을 것 같습니다. 딱히 좋은 방법은 아닐 수 있습니다.
1.4 Using Java8 Features
Java8에서는 이 문제를 해결하기 위한 여러 솔루션들이 있습니다.
@Test
public void java8_above_test() {
String someString = "elephant";
long count = someString.chars().filter(ch -> ch == 'e').count();
Assertions.assertEquals(2, count);
long count2 = someString.codePoints().filter(ch -> ch == 'e').count();
Assertions.assertEquals(2, count2);
}
이 방식은 깨끗하게 작성되어 좀 더 읽기 편합니다.
2. Using External Libraries
외부 라이브러리릍 통해 문제를 해결하는 방법을 알아봅니다.
2.1 Using StringUtils
Apache Common Lang3에 있는 StringUtils
클래스를 사용해서 문제를 해결할 수 있습니다. 해당 클래스에서는 countMatches()
함수를 제공하는데 이 함수는 기존 함수와 다르게 문자열에 대한 카운팅도 가능합니다.
implementation 'org.apache.commons:commons-lang3:3.17.0'
의존성을 추가해준 뒤, 예제를 작성합니다.
@Test
public void apache_common_test() {
int count = StringUtils.countMatches("elephant", "e");
Assertions.assertEquals(2, count);
}
2.2 Using Guava
guava 라이브러리를 통해서도 가능합니다.
testImplementation 'com.google.guava:guava:32.1.3-jre'
의존성을 추가해준 뒤, 마찬가지로 테스트 코드를 작성해봅니다.
@Test
public void guava_test() {
int count = CharMatcher.is('e').countIn("elephant");
Assertions.assertEquals(2, count);
}
2.3 Using Spring
Spring 프레임워크에서 제공하는 함수를 통해서 문제를 해결할 수 있습니다.
근데 이 문제를 해결하고자 Spring Framework 의존성을 추가하는건 추천하지 않습니다. 이미 존재하는 경우에 대해서 다룹니다.
@Test
public void spring_test() {
int count = StringUtils.countOccurrencesOf("elephant", "e");
Assertions.assertEquals(2, count);
}
3. 결론
문자열에서 특정 문자의 갯수를 세는 여러 방법에 대해 확인하였습니다.
블로그 주인장 생각
저는 외부라이브러리를 쓴다면 Apache Common Lang3을 사용하고 Core로만 개발해야한다면 Stream을 이용한 방식을 사용할 것 같습니다.
개인적으로 guava는 확 와닿지 않네요.
'Baeldung번역&공부 > Java-string' 카테고리의 다른 글
anagrams을 검증하는 방법(Check if Two Strings Are Anagrams in Java) (0) | 2025.02.19 |
---|---|
회문을 찾는 여러 방법(Check if a String Is a Palindrome in Java) (0) | 2025.02.14 |
랜덤한 문자열을 생성하는 방법(Generate Random String) (0) | 2025.02.11 |
isEmpty()와 isBlank()의 차이(Difference Between String isEmpty() and isBlank()) (0) | 2025.02.09 |
문자열 리스트를 문자열로 바꾸는 방법(Convert a Comma Separated String to a List in Java) (0) | 2025.02.09 |