시스템 입력을 String 으로 받고, 스트림으로 일단 변환했다.

 

스트림 API 메서드 사용하는 감을 아직 못잡겠다.

 

로직 자체는 떠올렸는데, 표현을 어떻게 하는지 모르겠다.

 

로직

필터링할 문자를 저장을 하고, 하나씩 꺼내서 입력받은 문자열요소와 순환하면서 비교후, 치환을 통해서 croatia 가 포함하지 않는 요소, 즉 a 와 같은 한글자의 문자열로 바꾼 후, String 의 길이를 출력하면 된다.

 

foreach 문을 통해서, List 를 순환하면서 요소를 하나씩 꺼내온다.

꺼낸 요소를 wordStream.map() 을 통해서 문자열을 치환한다.

map() 내부의 w 는 String word 의 문자열 전체를 의미하며, "helloc=" 이런 문자열을 가지고 있다면

 

w(helloc=).replace(list 요소, 치환 문자 a)

 

wordStream 은 "helloc=" 에서 -> "helloa" 로 바뀐다.

 

이걸 다시 wordStream 에 저장하여 모든 요소와 비교하여 치환하게 한다.

 

System.out::println 이런 표현도 어색해서 잘 모르겠다. 

뭔가 많이 보다보니, 한번씩 시도해보게 되는데 매커니즘을 좀 더 공부해봐야겠다.

 

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String word = sc.nextLine();

        List<String> croatia = new ArrayList<>();
        croatia.add("c=");
        croatia.add("c-");
        croatia.add("dz=");
        croatia.add("d-");
        croatia.add("lj");
        croatia.add("nj");
        croatia.add("s=");
        croatia.add("z=");

        Stream<String> wordStream = Stream.of(word);

        for(String croatiaElements : croatia){
            wordStream = wordStream.map(w -> w.replace(croatiaElements, "a"));
        }
//        wordStream.forEach(System.out::println);
        wordStream.forEach(w -> System.out.println(w.length()));
    }
}