import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// 문자열 입력 받기
String input = sc.nextLine();
// 문자열의 앞뒤 공백 제거
input = input.trim();
// 공백을 기준으로 단어 분리하여 배열로 저장
String[] words = input.split("\\s+");
// 단어의 개수 구하기
int wordCount = 0;
for(String word : words){
if(!word.isEmpty()){
wordCount++;
}
}
System.out.println(wordCount);
sc.close();
}
}
✔️ trim()
문자열의 앞과 뒤에 있는 공백(스페이스, 탭 등)을 제거하는 메서드이다.
trim() 메서드를 호출하면 해당 문자열의 시작과 끝에서 공백을 모두 제거한다.
중간에 있는 공백은 제거되지 않는다.
String str = " Hello, World! ";
String trimmedStr = str.trim();
System.out.println(trimmedStr); // 출력: "Hello, World!"
✔️split()
문자열을 특정 구분자를 기준으로 분리하여 배열로 반환하는기능을 가진 메서드이다.
`split("\\s+")` 여기서 `\\s+` 는 정규표현식으로서 공백을 의미한다.
(정규표현식에서 `\s`는 공백을 의미하며 `+`는 하나 이상의 공백을 의미한다.)
따라서 `\\s+` 는 하나 이상의 공백을 기준으로 문자열을 분리하라는 의미이다.
예를들어, 다음과 같은 문자열이 있다.
String str = "apple orange banana grape";
`str.split("\\s+")`을 호출하면 이 문자열은 공백이 하나 이상인 경우를 구분자로 사용하여 분리된다.
결과는 배열로 반환되며 각 원소에는 분리된 문자열이 들어간다.
String[] fruits = str.split("\\s+");
// fruits 배열에는 다음과 같이 문자열이 저장됩니다.
// fruits[0] = "apple"
// fruits[1] = "orange"
// fruits[2] = "banana"
// fruits[3] = "grape"
✔️ 아래 코드는 `str.split("\\s+")`를 통해 분리된 단어들의 배열 `words`를 순회하면서 각 단어가 비어있지 않으면
`(!word.isEmpty()`)`wordCount`변수를 증가시키는 기능을 수행한다.
for (String word : words) {
if (!word.isEmpty()) {
wordCount++;
}
}
공백으로 분리한 결과를 배열 `words`에 저장한다.
그 후 `for-each` 반복문을 이용해 `words` 배열의 각 요소인 단어들을 순회하면서 처리한다.
`word.isEmpty()` 는 문자열 'word`가 비어있는지 여부를 확인하는 메서드인다.
즉, 단어가 비어있지 않으면(단어가 존재하면) `wordCount`를 증가시킨다.
예를들어, 아래와 같이 입력 문자열이 있다고 가정한다.
String input = " apple orange banana grape ";
`split("\\s+")`를 사용하여 이 문자열을 공백으로 분리한다면 다음과 같은 배열 `words`가 생성된다.
words[0] = ""
words[1] = "apple"
words[2] = "orange"
words[3] = "banana"
words[4] = ""
words[5] = ""
words[6] = "grape"
words[7] = ""
이제 `for-each`반복문을 사용하여 각 단어를 순회하면서 비어있지 않은 단어의 개수를 구한다.
총 4개의 비어있지 않은 단어가 존재하므로 `wordCount`는 4가 된다.
✔️ `for-each` 반복문
배열 또는 컬렉션의 모든 요소를 순회하는데 사용되는 특수한 종류의 반복문이다.
다른 이름으로 "향상된 for 루프"라고도 불리며, 자바 5 버전 이후부터 지원되는 기능이다.
`for-each` 반복문의 구조는 다음과 같다.
for (자료형 변수 : 배열 또는 컬렉션) {
// 반복해서 실행할 코드
}
여기서 '자료형'은 배열 또는 컬렉션에 저장된 요소들의 자료형을 의미하며, '변수'는 각 요소를 대표하는 변수이다.
'배열 또는 컬렉션'은 반복하고자 하는 대상을 나타낸다.
예를 들어, 아래는 배열의 모든 요소를 출력하는 `for-each` 반복문의 예시다.
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
이 코드는 배열 `numbers`의 모든 요소를 순회하며 각 요소를 `number`라는 변수로 가져와서 출력한다.
`for-each` 반복문을 사용하면 반복 인덱스를 직접 다룰 필요없이 배열이나 컬렉션의 요소들에 간편하게 접근할 수 있어서 코드가 간결해지고 가독성이 좋아진다.
따라서 배열이나 컬렉션을 순회해야 할 때 `for-each` 반복문을 사용하는 것이 권장된다.
'문제' 카테고리의 다른 글
(백준) 2566번 '최댓값' (0) | 2023.08.08 |
---|---|
(백준) 2738번 '행렬 덧셈' (0) | 2023.08.08 |
(백준) 2908번 '상수' (0) | 2023.08.06 |
(백준) 11718번 '그대로 출력하기' (0) | 2023.08.05 |