본문 바로가기
공부/java

자바(java)의 문자열 관련 함수

by 샤샤샤샤 2022. 11. 22.

문자열 (String)

 

둘 이상의 문자가 존재하는 형식.

기본형인 정수형이나 실수형들과 달리 한도가 없다.

 

참조 변수이기에 값을 직접 저장하지 않는다.

예를 들어 정수형은 i=1;이라는 식으로 값을 할당하면 1이라는 값이 자신에게 주어진 메모리에 저장이 된다.

반변 정수형 i="1"; 은 1이라는 숫자가 저장된 '메모리의 주소'를 자신에게 주어진 메모리에 저장한다. 따라서 직접 비교는 불가능하다.

 

함수를 적용하고 싶은 문자열 뒤에 콤마(.)를 찍은 뒤 함수를 사용한다.

 

문자열 관련 메소드(함수)

1. 길이 얻기 함수

length() : 문자열의 길이를 구하는 함수

String str = "졸려요...";
System.out.println("문자열의 길이:" + str.length());                => 출력값:6

 

2. 비교

equals() : 두 문자열이 같은지 판별하는 함수. 괄호 안에 비교하고 싶은 문자열을 넣는다.

String str2 = "그럼, 잘자요.";
System.out.println( str.equals( str ) );    => 출력값: false

 

3.한 글자만 추출하기

charAt() : 괄호 안에 뽑고 싶은 글자의 인덱스를 넣는다.

System.out.println( str2.charAt(0) );         출력값 : 그

 

 

 4. 문자 바꾸기

repalaceAll() : 바꾸고 싶은 단어, 바꿀 단어를 순서대로 쓰면 된다.

resultStr = str2.replaceAll("잘", "깊게");
 System.out.println( resultStr );             => 출력값 : 그럼, 깊게자요.

 

5. 문자열 일부 추출하기

substring() : 시작 인덱스, 끝 인덱스 + 1 을 순서대로 적는다.

String resultStr = str.replaceAll("졸려요", "글쎄요");
System.out.println( resultStr );                        출력값 => 글쎄요...

 

6. 인덱스 알아내기

intdexOf() : 특정 문자열, 단어의 시작점을 알아낼 수 있다.

        System.out.println( str2.indexOf("깊게자요"))   => 출력값 : 4
                                                                  "깊" 의 인덱스 번호

 

7.문자열 연결하기

concat() : + 연산자를 이용해서 문자열을 잇는 것과 같은 수행을 함. 차이는 없다.

        System.out.println( str.concat( str2 ) );
        
                                출력값 => 글쎄요...그럼, 깊게 자요.

 

8. 대, 소문자로 바꾸기 함수

toUpperCase() : 괄호 안을 비워두면 문자열 전체가 대문자로 바뀐다.

toLowerCase() : 괄호 안을 비워두면 문자열 전체가 소문자로 바뀐다.

 

9. 앞뒤 공백 제거하기

trim() : 문자열 앞뒤에 존재하는 공백이 없어진다.

String str 3 = "   wow! wonderful!   ";
System.out.println(str3.trim());        출력값 => wow! wonderful    // 공백 제거됨

 

10. 문자열 전체에서 공백 제거하기

replaceAll(): 문자 바꾸기 함수 활용. 공백을 ""로 변경하면 된다.

        System.out.println( str3.replaceAll(" ", ""));
                                                 출력값 => wow!wonderful!

마찬가지의 방법을 사용하면 한 글자면 다른 글자로 바꾸는 식으로 사용 가능하다.

 

11. 특정 문자열 포함 여부 확인

contains() : 괄호 안에 확인하고자 하는 문자열을 넣으면 된다. 출력값은 불리언(boolean) 형식으로 나온다.

System.out.println( str3.contains("wow") );           출력값 => true
System.out.println( str4.contains("fantastic") );     출력값 => false

 

12. 문자열 분리하기 (토큰으로 분리 - Tokenizing)

split() : 괄호안에 분리 기준으로 삼고 싶은 문자열을 넣으면 자동적으로 분리가 된다.

            배열형식으로 분리된 문자열을 선언할 수 있다.\

String[] arrString = str3.split(" ");          // 공백을 기준으로 분리
for(int i=0; i<arrString.length; i++ ){
            System.out.println( arrString[i] );  // 모든 문자열 출력
        }
         출력값 => a[0] = wow! 
                   a[1] = wonderful!

 

public class ex53 {
    public static void main(String[] args) {
        //문자열 관련 함수들(메소드)
        String str = "This is mom!";
        String strKor = "가나다라";

        //문자열 길이 얻기
        System.out.println("문자열의 길이:" + str.length());
        System.out.println("문자열의 길이:" + strKor.length());

        //문자열 비교( 값 비교 )
        String str2 = "This is papa!";
        System.out.println( str == str ); //주소를 비교하므로 안됨!
        System.out.println( str == str2 ); //주소를 비교하므로 안됨!
        //다른 언어에서는 == 문자열 비교에 사용가능. C#, 파이썬, 코틀린, JS
        //자바에서는 반드시 문자열비교는 equals()함수를 사용함.
        System.out.println( str.equals( str ) );
        System.out.println( str.equals( str2 ) );

        // 값 변수 vs 참조 변수
        // 값 변수(Value Variable) : 실제 값을 가지고 있음.
        //    기본형 8개-int long short byte char float double boolean
        // 참조 변수(Reference Variable) : 주소 값을 가지고 있음
        //    문자열형 객체 배열 열거형 맵 리스트 집합

        //문자열에서 문자 한자씩 가져오기
        for(int i=0; i<str.length(); i++){
            System.out.println( str.charAt(i) );
        }
        //문자열 치환하기                        변경전          변경후
        String resultStr = str.replaceAll("mom", "hero");
        System.out.println( resultStr );
        //문자열 일부만 가져오기          시작인덱스 끝인덱스+1
        //                             "This is mom!";
        System.out.println( str.substring(8, 11) );

        //연습문제 34
        String str3 = "java programming is good!";
        //1. str3의 문자열의 길이를 출력하시오.
        //2. good 문자열을 perfect로 치환하여 출력하시오.
        //3. "programming" 문자열만 가져와서 출력하시오.
        //4. str3의 'i'문자가 몇개인지를 갯수를 출력하시오.
        System.out.println( str3.length() );
        System.out.println( str3.replaceAll("good", "perfect"));
        System.out.println( str3.substring(5, 16) );
        int count = 0;
        for( int i=0; i<str3.length(); i++){
            if( str3.charAt(i) == 'i'){
                count++;
            }
        }
        System.out.println("i의 갯수는 " + count);

        str3 = "Java Programming is Good!";
        //특정문자열의 시작 인덱스 얻어오기
        System.out.println( str3.indexOf("Programming") );

        //대문자로 바꾸기
        System.out.println( str3.toUpperCase() );
        //소문자로 바꾸기
        System.out.println( str3.toLowerCase() );
        //문자열 연결
        // 1. 문자열 연결 연산자 +
        // 2. concat() 함수
        String str4 = "Spring is also Good!";
        System.out.println( str3.concat( str4 ) );

        //문자열 공백 제거
        String str5 = " This is Trimed String~ ";
        //문자열의 시작과 끝의 공백만 제거(중간의 공백 제거 안함)
        System.out.println( str5.trim() );
        //문자열 중간의 공백도 모두 제거
        System.out.println( str5.replaceAll(" ", ""));

        //특정 문자열을 포함하고 있는지 true/false로 확인
        System.out.println( str4.contains("Spring") );
        
        //문자열 분리(토큰으로 분리 - Tokenizing)
        //                                 구분자
        String[] arrString = str3.split(" ");
        for(int i=0; i<arrString.length; i++ ){
            System.out.println( arrString[i] );
        }

        //연습문제 35
        String str6 = "Web Programming is funny~";
        //1. "funny"의 시작 인덱스를 출력하시오.
        //2. str6를 모두 대문자로 출력하시오.
        //3. str6를 모두 소문자로 ~
        //4. str5와 str6을 concat함수로 연결하여 출력하시오.
        System.out.println( str6.indexOf("funny") );
        System.out.println( str6.toUpperCase() );
        System.out.println( str6.toLowerCase() );
        System.out.println( str5.concat(str6) );
        String str7 = "  Test Trim String  ";
        //5. str7의 시작과 끝 공백만 제거하여 출력하시오.
        System.out.println( str7.trim() );
        //6. str7의 모든 공백을 *로 치환하여 출력하시오.
        System.out.println( str7.replaceAll(" ", ""));
        //7. str6은 "web"문자열을 포함하고 있는지? (대소문자 안가림)
        //   true/false로 출력하시오.
        System.out.println( str6.toLowerCase().contains("web") );
        //8. str6을 문자열 배열로 만들고, "Web"와 "funny~"만 출력하시오.
        String[] arrString2 = str6.split(" ");
        System.out.println( arrString2[0] + "," + arrString2[3] );
    }
}