안드로이드 Java String 문자열 다루기 정리

개발/안드로이드 2017. 9. 18. 10:56
반응형

안드로이드에서 자주 사용하는 String 및 언어별 인자 사용법에 있어 차이점이 있어 정리하고자 합니다.

iOS와 안드로이드를 동시 개발하는 저에게 split 같은 메소드는 약간 다르게 동작하는게 있어서 예상과 다른 결과에 실수를 많이 하게 됩니다.

메소드는 자주 까먹거나 헷갈리는 부분을 먼저 설명하며 계속 추가해 나갈예정입니다.


indexOf : 지정 문자열 찾기


1
2
3
String str1 = "Hello World!!";
int nIdx = str1.indexOf("World");
Log.i(TAG, "str1 = " + nIdx);
cs


----결과----

str1 = 6


지정 문자열이 몇번째에 있는 찾아서 반환한다. 만약 존재하지 않으면 -1을 리턴한다.


1
2
3
String str1 = "Hello World!!";
int nIdx = str1.indexOf("Wol");
Log.i(TAG, "str1 = " + nIdx);
cs


----결과----

str1 = -1



split : 특정 문자열을 배열로 분리하기

1
2
3
4
5
6
7
8
9
10
11
12
String str1 = "Hello|World|!!";
String[] arr = str1.split("\\|");
 
if (arr != null)
{
    int nCnt = arr.length;
 
    for (int i=0; i<nCnt; ++i)
    {
        Log.i("TAG""arr[" + i + "] = " + arr[i]);
    }
}
cs


----결과----

arr[0] = Hello

arr[1] = World

arr[2] = !!


split 메소드 인자에 '\\|'를 사용하고 있는것을 볼 수 있습니다. 

String의 split 인자는 정규식을 사용하기 때문에 '|'로 분리하려면 '\\|' 이렇게 해줘야 원하는 결과를 얻을 수 있습니다.


아래에서는 예외 사항 케이스를 살펴보도록 하겠습니다.

생각한것과 다르게 동작하는게 많아 주의를 요합니다.

1) 케이스1

1
str1 = "Hello World!!";
cs


----결과----

arr[0] = Hello World!!


2) 케이스2

1
str1 = "Hello||World!!";
cs


----결과----

arr[0] = Hello

arr[1] =

arr[2] = World!!


3) 케이스3

1
str1 = "||";
cs


----결과-----


케이스3의 경우는 arr.length 가 0이 나와 아무것도 찍혀있지 않습니다. 주의가 필요하겠습니다. 

"|1|2"로 하면 데이터가 3개가 나오나 빈데이터 일경우에는 0으로 나오게 됩니다.



replace : 문자열 치환하기

1
2
3
String str1 = "Hello World!!";
String str2 = str1.replace("!!""@@");
Log.i("TAG""str2 = " + str2);
cs


----결과-----

str2 = Hello World@@



substring : 특정영역 문자열을 가져오기

1
2
3
String str1 = "Hello World!!";
String str2 = str1.substring(6,9);
Log.i(TAG, "str2 = " + str2);
cs


----결과----

str2 = Wor


startWith : 앞부분 부터 비교하기

1
2
3
4
5
String str1 = "Hello World!!";
if (str1.startsWith("Hel"))
{
    
}
cs



endWith : 뒷부분 부터 비교하기

1
2
3
4
5
String str1 = "Hello World!!";
if (str1.endsWith("d!!"))
{
 
}
cs



StringBuilder 사용하여 문자열 합치기

String에서 +로 문자열을 합치게 되면 객체를 매번 생성하기 때문에 아주 비효율적입니다.

그래서 StringBuilder, StringBufferf를 이용해서 문자열을 합치는게 훨씬 생산적입니다.

StringBufferf, StringBuilder 둘다 기본적인 사용법은 동일하나 StringBuilder를 사용해 보도록 하겠습니다.


1
2
3
4
5
6
7
StringBuilder str2 = new StringBuilder();
str2.append("Hello");
str2.append(" ");
str2.append("World");
str2.append("!!");
 
Log.i("TAG""str2 = " + str2);
cs


----결과----

str2 = Hello World!!


참고로 StringBuffer, StringBuilder 사용 시 차이점은 Thread에서 동기화 지원여부입니다.

일반적인 사용시에는 특별한 차이가 없겠지만 성능면에서는 String < StringBuffer < StringBuilder 이기 때문에 StringBuilder을 사용하는게 좋겠습니다.  















반응형
admin