반응형
해당 글에서는 문자열에서 특정 문자를 추출하여 문자 개수를 구하는 방법에 대해서 확인해 봅니다.
1) Stream을 이용한 방식: filter().count()
1. 해당 메서드 관련 문법
1. chars() 문법
💡 chars() 란
- CharSequence를 얻기 위하여 Stream을 반환하는 메서드를 의미합니다.
매개변수 | 데이터 타입 | 설명 |
void | - | 매개변수가 존재하지 않으며 결과 리턴타입으로 Stream 객체 값을 반환합니다. |
2. filter() 문법
💡 filter() 란?
- Collection 인터페이스를 확장한 List, Set 등의 컬렉션 타입에서 원하는 조건에 맞는 요소들만 걸러내는 기능을 제공하는 메서드를 의미합니다.
매개변수 | 데이터 타입 | 설명 |
Predicate<T> | Stream<T> | 요소를 걸러낼 조건을 지정하는 Predicate 객체. |
3. count() 문법
💡 count() 란?
- Stream 인터페이스에서 제공되며 해당 스트림 요소의 수를 반환합니다. 이 메서드는 중간 연산자로 사용되며 최종 연산자를 호출하기 전에 호출되어야 합니다.
매개변수 | 데이터 타입 | 설명 |
void | - | 매개변수가 존재하지 않으며 결과 리턴 타입으로 long 타입을 반환합니다. |
[참고] Stream의 중간연산과 최종연산에 대해 관심이 있으시면 아래 링크를 참고하시면 도움이 됩니다.
2. chars().filter()을 이용한 예시
💡 해당 예시는 문자열 중에 “0”의 값을 찾아서 개수를 반환해 주는 예시입니다.
String s = "110010101001";
nt findZeroCnt1 = (int) s1.chars().filter(i -> String.valueOf((char) i).equals("0")).count(); // 8
[ 더 알아보기 ]
💡 아래의 코드는 왜 값이 0이 나올까?
- “0” 대신 “48”의 값을 찾기 때문에 그렇습니다. 아래와 같은 경우는 Stream을 이용하여 문자열을 분리했을 때 각 문자의 ASCII 코드 값을 반환하기 때문입니다.
String s = "110010101001";
int findZeroCnt = (int) s.chars().filter(i -> String.valueOf(i).equals("0")).count(); // 0
[ 더 알아보기 ]
💡 문자열 내에서 소문자나 대문자를 찾아서 개수를 구하는 방법
String str2 = "Hello World";
// 소문자만 찾아서 갯수를 구하는 방법
long findLowerCase = str2.chars()
.filter(Character::isLowerCase)
.count(); // 8
// 대문자만 찾아서 갯수를 구하는 방법
long findUpperCase = str2.chars()
.filter(Character::isUpperCase)
.count(); // 2
2) for문 + charAt()을 이용한 방식 : charAt()
1. charAt() 문법
💡 charAt() 란?
- 문자열에서 지정된 인덱스에 있는 문자를 반환하는 데 사용됩니다. 즉, 문자열에서 특정 위치의 문자를 찾을 때 사용할 수 있습니다.
public char charAt(int index)
매개 변수 | 데이터 타입 | 설명 |
index | int | 주어진 인덱스에 있는 문자를 반환합니다. 인덱스는 0부터 시작합니다. |
2. charAt()을 이용한 예시
💡 해당 예시는 문자열 중에 “0”의 값을 찾아서 개수를 반환해 주는 예시입니다.
String s = "110010101001";
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == "0".charAt(0)) removeZeroCnt++;
}
3) for ~ each문 + split()을 이용한 방식 : split()
1. split() 문법
💡 split()이란?
- 문자열을 분할(split)하려면 split() 메서드를 사용합니다. 이 메서드는 문자열을 지정된 구분자(delimiter)를 기준으로 분리한 문자열 배열을 반환합니다.
public String[] split(String regex, int limit)
매개변수 | 데이터 타입 | 설명 |
regex | String | 분리할 구분자. 문자열 또는 정규식으로 지정할 수 있습니다. |
limit | int | 분할할 문자열의 최대 개수. 생략하면 모든 문자열을 분할합니다. |
2. split()을 이용한 예시
💡 해당 예시는 문자열 중에 “0”의 값을 찾아서 개수를 반환해주는 예시입니다.
String s = "110010101001";
for (String item : s.split("")) {
if (Integer.parseInt(item) == 0) removeZeroCnt++;
}
4) replace를 이용한 방식 : replace
1. replace() 문법
💡 replace() 란?
- Java에서 문자열을 처리할 때, replace() 메서드를 사용하여 특정 문자열을 다른 문자열로 바꿀 수 있습니다. 이 메서드는 String 클래스에 포함되어 있으며, 기존 문자열을 변경하지 않고 새로운 문자열을 반환합니다.
public String[] replace(char oldChar, char newChar)
파라미터 | 데이터 타입 | 설명 |
oldChar | char | 바꿀 문자열 |
newChar | char | 대체할 문자열 |
2. replace()를 이용한 예시
💡 해당 예시는 문자열 중에 “0”의 값을 찾아서 개수를 반환해 주는 예시입니다.
String s = "110010101001";
removeZeroCnt += s.length() - s.replace("0", "").length();
오늘도 감사합니다. 😀
반응형
'Java > Short 개발' 카테고리의 다른 글
[Java/Short] 배열/리스트 중복제거 방법 : 전체, 인접한 요소 중복 제거 (0) | 2023.05.01 |
---|---|
[Java/Short] 문자열 <-> Date 타입 간의 변환 방법 : + Date 연산 (0) | 2023.04.29 |
[Java/Short] 배열에서 순차적으로 숫자 값 채우는 방법: for, setAll, rangeClose, range (0) | 2023.04.28 |
[Java/Short] 문자열 배열 <-> 정수 배열 변환 방법 (0) | 2023.03.29 |
[Java/Short] 배열/리스트 값 제거 방법 : 요소 첫번째/마지막 값 제거, 특정 값 제거 (0) | 2023.03.05 |