얄코의 제대로 파는 자바/섹션3

문자열의 메서드들(상)

백엔드 개발자 2024. 2. 28. 00:46

문자열은 불변

문자열로 무언가 작업을 할때 원본 공간 그자체가 바뀌거나 하는 것이 아니라 다른 공간에서 만들어서 전달한다는 의미.

원본 자체는 그대로 유지된다는 의미.

 

 

각 메서드들의 input값과 return값에 집중하면 도움이 될 것이다.

문자열 메서드


문자열 길이 반환 length()

		int int1 = "".length();
        int int2 = "헬로".length();
        int int3 = "Hello".length();
        int int4 = "김수한무 거북이와 두루미".length();
  • input값 : 없음
  • return값 :  int형으로 자리수 반환.

 

빈 문자열 여부 

		String str1 = "";
        String str2 = " \t\n";
        
        int int1 = str1.length();
        int int2 = str2.length();

        //  💡isEmpty : 문자열의 길이가 0인지 여부
        boolean bool1 = str1.isEmpty();
        boolean bool2 = str2.isEmpty();

        //  💡isBlank : 공백(white space)을 제외한 문자열의 길이가 0인지 여부
        boolean bool3 = str1.isBlank();
        boolean bool4 = str2.isBlank();
  • input값 : 없음
  • return값 :  boolean형으로 반환.

빈문자열 체크에는 isEmpty와 isBlank가 있는데, isEmpty가 공백까지 체크해서 좀 더 엄격하다 정도 알아두자!

 

 

공부할때 위 2함수 차이처럼 사소한걸 다 기억하려고 하면 끝이 없기 때문에

이런 것들이 있고, 특징이 달라서 살펴보고 사용해야 한다 정도 알아두자.

 

 

 

트리밍 

				String str3 = "\t 에 네 르 기 파!! \n";

        //  💡 trim : 앞뒤의 공백(white space) 제거
        String str4 = str3.trim();

  • input값 : 없음
  • return값 :  String형으로 반환.
  1. 앞뒤의 공백을 제거해준다.
  2. 이때 문자열 사이의 공백을 제거해주지는 않는다.
  3. str3에 trim을 한다고 해서 원본 문자열인 str3이 바뀌는 것은 아니고, 새 공간에 저 값을 할당해서  str4에 들어간다.

 

				//  변수 그 자체에 적용하기
        //  - 문자열은 불변 : 변수가 가리키는 종이를 바꾸는 것
        str3 = str3.trim();

자체를 변경할 수도 있다.

 

 

 

 

 

문자 반환

		String str1 = "아야 슬슬 오함마 준비해야 쓰것다";

        //  💡 charAt : ~번째 문자 반환
        char ch1 = str1.charAt(0);
        char ch2 = str1.charAt(4);

        //  ⭐️ 마지막 문자 얻기
        char ch3 = str1.charAt(str1.length() - 1);
  • input값 : ~번째 문자의 인덱스 번호. 첫번째면 0이 될 것이다.
  • return값 :  char형으로 문자 반환.

마지막 문자를 얻을때에는 length()-1을 한 인덱스를 넣는다.

왜냐하면 인덱스는 1이 아닌 0부터 시작하니까 1칸씩 땡긴다는 마인드로 해야되기 때문.

 

 

 

문자(열)의 위치 반환

				String str2 = "얄리 얄리 얄라셩 얄라리 얄라";

        //  💡 indexOf/lastIndexOf : 일치하는 첫/마지막 문자열의 위치
				//  앞에서부터 카운트해서 int로 반환

        //  두 번째 인자 : ~번째 이후/이전부터 셈
        int int1 = str2.indexOf('얄');
        int int2 = str2.indexOf('얄', 4);

        int  int3 = str2.indexOf("얄라");
        int  int4 = str2.lastIndexOf("얄라");
        int  int5 = str2.lastIndexOf("얄라", 12);

				//  💡 포함되지 않은 문자는 -1 반환
        int int6 = str2.indexOf('욜');
  • input값 :
    • 1번째인자 int, char, string 다양함. 찾으려는 문자열, 
    • 2번째 인자 -> 해당 인자 인덱스 다음부터 문자열위치 찾도록 함. 해당인덱스 포함이다. (만약 4인데 4인덱스에 찾으려는 값이 있으면 4를 반환한다.)
  • indexOf/lastIndexOf return값 :  int값으로 일치하는 첫 /마지막 문자열의 위치를 반환한다.

 

 

값 동일 여부 확인

				//  💡 equals : 대소문자 구분하여 비교
        String str_a1 = "Hello World";
        String str_a2 = new String("Hello World");
        String str_a3 = "HELLO WORLD";

				boolean bool_a0 = str_a1 == str_a2;  // ⚠️ 문자열은 이렇게 비교하지 말 것!

        boolean bool_a1 = str_a1.equals(str_a2);
        boolean bool_a2 = str_a1.equals(str_a3);

        //  💡 equalsIgnoreCase : 대소문자 구분하지 않고 비교
        boolean bool_a3 = str_a1.equalsIgnoreCase(str_a3);
        boolean bool_a4 = str_a2.equalsIgnoreCase(str_a3);

  • input값 : 비교하려는 문자열
  • output값 : boolean값. 일치여부 반환
  1. == : 문자열 생성 방식에 따라 값을 다르게 볼 수 있어서 지양.
  2. equals : 값만 보고 비교. 대소문자를 구분한다.
  3. equalsIgnoreCase : 대소문자도 구분없이 비교해준다.

 

 

포함여부 확인

		String str_b1 = "옛날에 호랑이가 한 마리 살았어요.";

        //  💡 contains : 포함 여부
        boolean bool_b1 = str_b1.contains("호랑이"); //true
        boolean bool_b2 = str_b1.contains("나무꾼"); //false 나무꾼 은 없음.

        //  💡 startsWith : (주어진 위치에서) 해당 문자열로 시작 여부
        boolean bool_b3 = str_b1.startsWith("옛날에");// true 옛날에 로 시작하므로
        boolean bool_b4 = str_b1.startsWith("호랑이");// fasle
        boolean bool_b5 = str_b1.startsWith("호랑이", 4);//true 4번째 이후 처음이 호랑이 임.

        //  💡 endsWith : 해당 문자열로 끝남 여부
        boolean bool_b6 = str_b1.endsWith("살았어요.");// true
        boolean bool_b7 = str_b1.endsWith("호랑이"); // false
  • input값 : 확인하려는 문자열
  • output값 : boolean값 반환
  1. contains : 좀더 섬세한 확인 메서드. CharSequence를 인자로 받는데 문자열도 여기 포함된다 정도만 이해하고 있기.
  2. startWith : 특정문자열로 시작하는지. 2번째 인자로 시작위치를 조정할 수 있다.
  3. endWith : 특정문자열로 끝나는가.

 

 

정규표현식 일치 여부 확인

				String emailRegex = "^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$";

        String str_c1 = "yalco@yalco.kr";
        String str_c2 = "yalco.yalco.kr";
        String str_c3 = "yalco@yalco@kr";

        boolean bool_c1 = str_c1.matches(emailRegex);
        boolean bool_c2 = str_c2.matches(emailRegex);
        boolean bool_c3 = str_c3.matches(emailRegex);
  • input값 : 정규표현식
  • output값 : boolean값. 일치여부 반환

matches : 정규 표현식의 문자열을 포함하는지 여부

 

정규표현식 - 🔗 정규 표현식 - 위키백과

 

 

문자열 비교

		String str_a1 = "ABC";
        String str_a2 = "ABCDE";
        String str_a3 = "ABCDEFG";

        //  💡 compareTo : 사전순 비교에 따라 양수 또는 음수 반환

        //  같은 문자열이면 0 반환
        int int_a1 = str_a1.compareTo(str_a1);

        //  시작하는 부분이 같을 때는 글자 길이의 차이 반환
        int int_a2 = str_a1.compareTo(str_a2);
        int int_a3 = str_a1.compareTo(str_a3);
        int int_a4 = str_a2.compareTo(str_a3);
        int int_a5 = str_a3.compareTo(str_a1);

        String str_a4 = "HIJKLMN";

        //  시작하는 부분이 다를 때는 첫 글자의 정수값 차이 반환
        int int_a6 = str_a1.compareTo(str_a4);
        int int_a7 = str_a4.compareTo(str_a3);

 

  • input값 : 비교대상 문자열
  • output값 : int값 비교값에 따라서 정수 반환.

compareTo : 사전순 기준으로 양수나 음수 반환

  • 같은 문자열 : 0  
  • 시작부분이 같고 한쪽만 있는 경우 : 길이차이 
  • 시작부터 달라지는 부분 : 정수값 차이를 반환한다.

 

		String str_b1 = "abc";
        String str_b2 = "DEF";

        int int_b1 = str_b1.compareTo(str_b2);

        //  💡 compareToIgnoreCase : 대소문자 구분 없이 비교
        int int_b2 = str_b1.compareToIgnoreCase(str_b2);

CompareToIgnoreCase : 대소문자 구분없이 비교한다.

 

 

대소문자 변환

		String str_a1 = "Hello, World!";

        // 💡 toUpperCase / toLowerCase : 모두 대문자/소문자로 변환
        String str_a2 = str_a1.toUpperCase();
        String str_a3 = str_a1.toLowerCase();
  • input값 : 문자열
  • output값 : 소문자처리 or 대문자처리된 문자열 반환

 

			
   		String str_b1 = "Hi! How are you? I'm fine. Thank you!";
        String str_b2 = "how";

        boolean bool_b1 = str_b1.contains(str_b2);

        //  ⭐️ 영문 텍스트에서 대소문자 무관 특정 텍스트 포함 여부 확인시
        boolean bool_b2 = str_b1
                .toUpperCase()
                .contains(str_b2.toUpperCase());

        boolean bool_b3 = str_b1
                .toLowerCase()
                .contains(str_b2.toLowerCase());

 

  • 영문은 위치에 따라 첫글자가 대문자가 될 수도 있기 때문에, toUpperCase나 toLowerCase로 동일하게 만들어 놓고 처리하면 유용하게 쓰일 수 있겠다.

 

 

 

본문 제목


내용

 

 

 

 

 

 

 

 

 

출처 

  • 사이트, 검색명 (날짜)