본문 바로가기
얄코의 제대로 파는 자바/섹션3

문자열의 메소드들(하)

by 백엔드 개발자 2024. 3. 1.

이어붙이기


concat()

				//  💡 concat : 문자열을 뒤로 이어붙임
        String str_a1 = "슉-";
        String str_a2 = "슈슉-";
        String str_a3 = "슈슈슉-";

        String str_a4 = str_a1 + str_a2 + str_a3;

        String str_a5 = str_a1.concat(str_a2);

        //  ⭐️ 메서드 체이닝
        String str_a6 = str_a1
                .concat(str_a2)
                .concat(str_a3)
                .concat(str_a4)
                .concat(str_a5);

 

슉-슈슉-슈슈슉-  : 1, 2, 3을 전부 이어 붙인 것
슉-슈슉- : 1과 2를 붙인것
슉-슈슉-슈슈슉-슉-슈슉-슈슈슉-슉-슈슉- : 1,2,3,4,5 다 붙인 것

  • input값 : 뒤에 붙일 문자열
  • return값 :  문자열 반환.
메서드 체이닝
반환값이 문자열인 값에 대해서 연속적으로 메서드들을 이어 붙이는 것. 
1. 문자열만 이어붙일 수 있다
2. concat은 필요시에만 새 인스턴스를 생성한다고 한다. (참고만)

 

 

 

NULL이 포함된 경우

				//  3. null이 포함될 경우

        String str_c1 = null;

        //  + 연산자는 null과 이어붙이기 가능
        String str_c3 = str_c1 + null + "ABC";

        //  ⚠️ concat은 NullPointerException 발생
        //String str_c4 = str_c1.concat("ABC");
        //String str_c5 = "ABC".concat(str_c1);

 

concat은 파라미터로 null을 받을 때 null 처리를 해주지 못하는 단점이 있다.(+ 연산자는 가능)

concat은 null이 아닌 문자열에만 사용가능

 

 

CONCAT과 +의 성능 비교

				//  4. ⭐️ 다중 연산시 생성되는 문자열 인스턴스의 수가 다름

        String str_d1 = "a" + "b" + "c" + "d";

        // + 연산은 내부적으로 아래와 같이 최적화됨 (이후 배움)
        String str_d2 = new StringBuilder("a")
                .append("b")
                .append("c")
                .append("d")
                .toString(); // "abcd"가 생성됨
        // "a", "b", "c", "d", "abcd"가 생성되어 메모리 차지

        //  concat은 매 번 문자열을 반환하므로
        String str_d3 = "a"
                .concat("b") // "ab"가 생성됨
                .concat("c") // "abc"가 생성됨
                .concat("d"); // "abcd"가 생성됨
        // "a", "b", "c", "d", "ab", "abc", "abcd"가 생성되어 메모리 차지

 

한줄로 쭉 +로 작성할 경우에는 +가 성능적으로 더 좋음

 

concat : 맨앞에서부터 차례차례 하나씩 더하면서 메모리를 각각 할당한다.

 

+연산자는 자바 오래된 버전이후로 내부적으로 StringBuilder를 사용해서 플러스 연산을 실행한다.

append를 사용함.( append는 모든 과정을 암산해서 더해놓고 toString일때 결과를 내놓는다. 그래서 중간중간 메모리 할당이 없음.)

 

 

언제 사용하면 유용할까?

메서드 체이닝의 다른 메서드들과 함께 사용할 수 있을때 같이 쓰면 유용할 수 있음.

 

 

 

 

반복하기


 

				String str_a1 = "덜컹";

        // 💡 repeat : 문자열을 주어진 정수만큼 반복
        String str_a2 = str_a1.repeat(2);
        String str_a3 = str_a1
                .concat(" ")
                .repeat(3)
                .trim();
  • input값 : 반복할 횟수
  • return값 :  문자열 반환.

주어진 문자열을 횟수만큼 반복해서 붙이는 함수

 

 

잘라오기


 

  • input값 : 자르기 시작할 인덱스 위치, 마지막 위치
  • return값 :  잘라진 문자열 반환.

 자르기 시작 인덱스부터 ~ 마지막인덱스 전까지 문자열 자르는 함수

 

응용 - 문자열로만 잘라내기

 

indexOf는 문자열의 첫 위치를 반환한다.

다의 위치 : 5

구하라의 위치 : 11

그런데 그냥 5,11 이런식으로 자르면 "다 jog " 이렇게 잘려버리니까

piece2.length()를 더해서  (5,14)로 "다 job 구하라"가 된다.

 

(1번째 문자열, 2번째문자열 + 2번째문자열 길이)로 문자열로만 구할 수도 있다.

 

 

 

 

치환


 

				//  💡 replace : 주어진 앞의 문자(열)을 뒤의 문자(열)로 치환
        String str_c1 = "점심에 보쌈집에 가서 수육을 먹었다.";
        String str_c2 = str_c1.replace("보쌈", "중국");

        //  여럿 포함시 모두 치환
        String str_c3 = "밥 좀 먹자, 응? 야, 밥 좀 먹자고 밥 밥 밥";
        String str_c4 = str_c3.replace('밥', '빵');

        // ⭐️ 원본은 바뀌지 않는 점 확인
  • input값 : 치환대상 문자열, 치환할 문자열 
  • return값 :  수정된 문자열 반환.

 

원본은 바뀌지 않는다.

 

 

메서드 체이닝 활용

		//  메서드 체이닝
        String str_d1 = "하여튼 호의가 반복되면 권리인 줄 알아";
        String str_d2 = str_d1
                .replace("하여튼", "아무튼")
                .replace("호의", "호이".repeat(2))
                .replace("권리", "아기공룡 둘리");

 

메서드 체이닝으로 다채롭게 바꿀 수도 있고, 다른 메서드(repeat)를 사용해서 쓸 수도 있다.

 

 

정규표현식 활용

 

replaceAll, replaceFirst로 정규식과 같이 사용해서 

정규식에 포함되는 대상을 모두 바꾸거나 앞에만 바꾸는 것처럼 활용할 수도 있다.

 

 

배열


				String str1 = "가나다라마";
        String str2 = "010-1234-5678";
        String str3 = "하나 둘 셋 넷 다섯";

        //  💡 toCharArray : 문자열을 분할하여 문자의 배열로 반환
        char[] chAry1 = str1.toCharArray();
        char[] chAry2 = str3
                .replace(" ", "")
                .toCharArray();

        //  💡 split : 주어진 기준으로 (~개까지) 분할하여 문자열 배열로 반환
        String[] strAry1 = str1.split("");
        String[] strAry2 = str2.split("-");
        String[] strAry3 = str3.split(" ");
        String[] strAry4 = str3.split(" ", 3);

 

toCharArray() : 문자열을 쪼개서 배열로 반환한다. 메서드체이닝을 써서 기준대로 배열에 넣을 수도 있다.

 

split : 아예 분할기준, 개수를 인자로 정해서 문자열 배열로 반환한다.

 

 

 

 

 

 

 

 

 

 

Ref

 

제대로 파는 자바 (Java) - by 얄코 강의 - 인프런

적당히 배워서는 살아남을 수 없는 시대. 자바, 한 번에 제대로 파서 마스터하세요!, 자바(Java), 생기초부터 활용까지 강의 하나로 한번에 끝!  🎓 대학교 이메일 계정이 있다면? 👉 얄코 강의

www.inflearn.com

 

 

'얄코의 제대로 파는 자바 > 섹션3' 카테고리의 다른 글

비트연산자  (0) 2024.03.03
타입 추론  (0) 2024.03.03
문자열의 메서드들(상)  (0) 2024.02.28
문자열 자료형과 기초 사용법  (0) 2024.02.21