관리 메뉴

나만을 위한 블로그

[JAVA] 문자열 변환하는 방법 / 특정 문자열을 검색하는 방법 본문

JAVA

[JAVA] 문자열 변환하는 방법 / 특정 문자열을 검색하는 방법

참깨빵위에참깨빵 2021. 2. 15. 00:10
728x90
반응형

앱을 만들다 보면 문자열을 가공해야 할 필요가 있다. 특히 중간에 특수문자가 껴 있어서 바꿔야 한다거나 등등이 그것이다.

이번 포스팅에선 자꾸 찾아보기도 귀찮은 문자열 변환 방법을 정리해두려고 한다.

 

 

  • 문자열 검색

문자열을 검색한다고 썼는데, 이건 문자열에서 특정 문자열을 검사한다는 뜻이다.

이걸 수행하려면 contains()를 사용하면 된다. 아래 예시를 보자.

public static void main(String[] args)
    {
        String str = "티스토리^^안드로이드^^자바";
        if (str.contains("%%"))
        {
            System.out.println("%% 포함됨");
        }
        else
        {
            System.out.println("%% 포함되지 않음!!");
        }
    }

contains()는 검색하려는 문자열이 있는 경우 true를 리턴하고, 없으면 false를 리턴하는 메서드다.

위 예제를 실행하면 str 안에 %% 문자열이 없으니 else문으로 빠져서 "%% 포함되지 않음!!" 문자열이 출력된다.

"%% 포함됨"이 나오게 하려면 ^^을 %%로 바꾸면 된다.

 

주의할 거라면 contains()와 비슷한 메서드로는 equals()가 있는데, 이 메서드는 "문자열 자체"가 같은지 확인하고 같으면 true, 다르면 false를 리턴하는 메서드다. 위의 예제를 살짝 변형해서 확인해보자.

public static void main(String[] args)
    {
        String str = "티스토리^^안드로이드^^자바";
        if (str.equals("이거랑 같으면 true 리턴"))
        {
            System.out.println("이건 같은 문자열이네요");
        }
        else
        {
            System.out.println("이건 서로 다른 문자열이네요");
        }
    }

equals() 안의 문자열과 str이 같으면 true기 때문에 같은 문자열이라고 출력되고, 서로 다르면 false기 때문에 서로 다른 문자열이라고 출력된다. 위 예제를 실행하면 두 문자열이 서로 다르기 때문에 역시 else로 빠져서 콘솔에 서로 다른 문자열이라고 출력된다.

 

근데 포함됐는지 아닌지를 확인하는 게 아니라 찾는 문자열의 위치가 어딘지를 알고 싶을 수도 있다.

이런 경우에는 indexOf()를 쓰면 된다. 먼저 indexOf()를 IDE에 쳐보면 아래와 같이 나온다.

 

4가지 방법으로 쓸 수 있는 걸 볼 수 있다. 컨트롤 좌클릭으로 이 메서드를 좀 더 자세히 확인해보자.

public int indexOf(String str) {
        byte coder = coder();
        if (coder == str.coder()) {
            return isLatin1() ? StringLatin1.indexOf(value, str.value)
                              : StringUTF16.indexOf(value, str.value);
        }
        if (coder == LATIN1) {  // str.coder == UTF16
            return -1;
        }
        return StringUTF16.indexOfLatin1(value, str.value);
    }

문자열을 찾으면 그 문자열이 가장 맨 처음 위치한 인덱스를 리턴하고, 못 찾았을 경우에는 -1을 리턴하는 걸 볼 수 있다.

아래는 IDE에서 확인할 수 있는 indexOf()의 설명이다.

이 문자열 내에서 지정된 하위 문자열의 첫 번째 발생 인덱스를 반환합니다. 반환된 인덱스는 다음과 같은 최소값 k입니다. k값이 없으면 -1이 반환됩니다

이제 위 사진대로 4가지 방법으로 indexOf()를 써보자. 예시 문자열은 생각하기 귀찮으니까위에서 썼던 문자열을 그대로 쓸 것이다.

public static void main(String[] args)
    {
        String str = "티스토리^^안드로이드^^자바";
        System.out.println(str.indexOf("안", 0));
        System.out.println(str.indexOf("안"));
        System.out.println(str.indexOf('드', 0));
        System.out.println(str.indexOf("자", 0));
        /*
        6
        6
        7
        13
         */
    }

위부터 순서대로 6, 6, 7, 13이 출력된다.

1번째와 2번째 사용례를 보면 "안"이라는 글자가 몇 번째 인덱스에 위치했는지를 정수값으로 리턴하는 걸 보여준다. 이 메서드는 시작 인덱스가 0이니 헷갈리지 말자.

3번째 사용례는 1번째 인덱스로부터 '드'라는 글자가 몇 번째 인덱스에 위치했는지를 정수값으로 리턴하는 걸 보여준다.

char형으로 인자를 넣어야 하니 작은따옴표를 넣어야 한다. 개인적으론 4번 사용례와 별 차이가 없는 것 같다.

4번째 사용례도 3번째 사용례와 마찬가지로 해당 문자가 첫 번째 인덱스로부터 몇 번째에 위치한지를 정수값으로 리턴한다.

만약 인덱스 위치 계산이 이해가 안 되면 아래 표를 참고하자.

^ ^
0 1 2 3 4 5 6 7 8 9

티-0부터 스-1, 토-2 식으로 점점 인덱스가 1씩 증가하는 식이다.

 

  • 문자열 변환

이제 문자열 변환을 확인해보자. 문자열을 바꾸는 메서드는 replace(), replaceAll(), replaceFirst()가 있지만 개인적으론 replace()를 주로 사용하니 replace()만 살펴보겠다. replace()를 이해하면 다른 메서드 이해하는 건 금방이니 생략하는 것도 있다.

public static void main(String[] args)
    {
        String str = "티스토리^^안드로이드^^자바";
        str = str.replace("^^", ", ");
        System.out.println(str);
        /*
        티스토리, 안드로이드, 자바
         */
    }

"^^"를 ", "로 바꾸고 println()을 걸면 바꾼 대로 콘솔에 출력되는 걸 확인할 수 있다. 정말 간단하다.

반응형

'JAVA' 카테고리의 다른 글

[JAVA] StringBuilder란? StringBuilder 사용법  (0) 2021.05.10
[JAVA] 추상 클래스 vs 인터페이스  (0) 2021.03.14
[JAVA] 상속이란? 오버라이딩이란?  (0) 2020.12.19
[JAVA] 클래스란? 객체란?  (0) 2020.12.19
[JAVA] 메서드란?  (0) 2020.12.13
Comments