String 다루기(3) - matches, regex

Posted by ITPangPang
2016. 10. 24. 23:13 안드로이드(android)/String 다루기


String 다루기(3)

matches, regex



ㆍ String 다루기 3번째로는 matches를

    한번 써보도록 하겠습니다.


ㆍ matches만 쓰기에는 내용이 짧을 것 같으니

    정규표현식이나, 다른 메서드와 혼합해서

    사용해보도록 하겠습니다




일단 matches란?


matches는

문자열에서 원하는

패턴이 있는지 알아보는

메서드 입니다.


원하는 패턴이라고 

말하는 이유는

matches를 사용할때는

정규표현식이 허용됩니다


일단 정규식을

사용하지 않고 matches를

써보도록 하겠습니다.


String str = "Apple";
Log.d("ITPANGPANG","결과=>"+str.matches("Appl"));
Log.d("ITPANGPANG","결과=>"+str.matches("Apple"));



Match대상 : Apple


첫번째 매치

Appl(false)


두번째 매치

Apple(true)


기본적인 사용방법은

아주 쉽죠


그냥 비교해서 똑같나

안똑같나 확인하면 끝입니다.


그렇다면

이건 어떻까요?

String str = "Apple";
Log.d("ITPANGPANG","결과=>"+str.matches("appLe"));
Log.d("ITPANGPANG","결과=>"+str.matches("APPLE"));



대소문자 구별을

하는지 확인하기 위해서

2가지를 테스트해봤는데

결과는 둘 다 false입니다.


엄청 까다롭죠?


이럴꺼면 안쓰고

말죠!


그래서!!!

사람들이 안 쓸까봐?

바로 정규표현식을

허용하는 거겠죠


문자열의 처리의 꽃 정규표현식!!


여기서

정규표현식을

설명하고 하지는 않을겁니다

그냥 몇가지 써보는 정도..


(사실 여기 블로그에.. 기타카테고리에..

Regular Expression.. 이라고 있습니다..

열심히 써야지 했는데 미루다 보니

글을 몇개 안쓰긴 했지만..

아주 기초적인 내용은 있습니다..)


일단 위에서 까다롭게

했던 대소문자!!

부터 처리해버리겠습니다.


대소문자 무시!!

(?i)


따옴표 안에 위엣놈만

써주면 아주 간단하게

대소문자를 무시해준답니다.


String str = "Apple";
Log.d("ITPANGPANG","결과=>"+str.matches("(?i)appLe"));
Log.d("ITPANGPANG","결과=>"+str.matches("(?i)APPLE"));




간단하죠잉!



그렇다면 이렇게 하면?

String str = "Apple";
Log.d("ITPANGPANG","결과=>"+str.matches("a(?i)ppLe"));
Log.d("ITPANGPANG","결과=>"+str.matches("A(?i)PPLE"));



A이후

정규식을 사용해서

뒷부분은 무시하고

match 시켜봤습니다


당연히

처음은 false!

두번째는 true!


이번에는 String 배열과 정규표현식!


true, false만

찍어보기에는

재미가 없잖습니까


이번에는

String str[] = {"김철수", "김갑수" ,"이철수", "이갑수", "김갑돌", "이갑돌", "이갑순"};


여기서 7명의

사람중에 성이 "김"씨인

사람을 찾아보고 몇명인지

알아보겠습니다.


역시 정규표현식이

들어가야겠죠?


.(마침표)

정규표현식에서

아마 거의 처음에 배우지

않을까 생각되네요


모든 문자열 한글자

의미합니다.


그럼 마침표

3개를 찍으면?

모든 문자 3글자겠죠?

확인해보면!!

int j = 0;
String str[] = {"김철수", "김갑수" ,"이철수", "이갑수", "김갑돌", "이갑돌", "이갑순"};
for(int i= 0; i<str.length; i++)
{

if(str[i].matches("..."))
{
Log.d("ITPANGPANG","이름이 3글자인 사람은? =>"+str[i]);
j++;
}
}
Log.d("ITPANGPANG","3글자인 사람 몇명?=>"+j);



아주 심플심플 하죠?


그럼 김씨인 사람은?

!! 맞습니다

"김.."

하면 되겠죠!

int j = 0;
String str[] = {"김철수", "김갑수" ,"이철수", "이갑수", "김갑돌", "이갑돌", "이갑순"};
for(int i= 0; i<str.length; i++)
{

if(str[i].matches("김.."))
{
Log.d("ITPANGPANG","성이 김씨인 사람은 =>"+str[i]);
j++;
}
}
Log.d("ITPANGPANG","김씨 아저씨 몇명?=>"+j);



잘 나왔죠?

아직까지 할 만 한것

같습니다.


마지막으로 replace, split도 같이 써보자!


마지막으로

그리 난이도가 높지는

않지만 몇가지 짬뽕해서

써보도록 하겠습니다.


String str = "song.mp3, song.txt, song.html, song2.mp3, song.wmv, hi.mp3, hi.txt";


위와 같은

String에서 mp3 파일만

골라내는 예제를

한번 해보겠습니다.


뭐 방법이 많겠지만..

(indexOf로도 될 것 같네요.)


replace, split, 정규식을 써서

찾아내보도록 하겠습니다


자 일단

저는 위 String을

String 배열로 분리시키고

싶습니다.


분리하는 기준은

스페이스(띄어쓰기)

하면 될 것 같습니다


저는 배열로 나눌것이라

위에서 ,(쉼표)

필요없는 존재이므로

,(쉼표)를 일단 제거해버리겠습니다


String str = "song.mp3, song.txt, song.html, song2.mp3, song.wmv, hi.mp3, hi.txt";
String convert = str.replaceAll(",","");


replaceAll을 통해서

,(쉼표)를 ""제거해버렸습니다.


그 후에

스페이스(띄어쓰기)를

기준으로 split를 써서

배열로 쪼개겠습니다

String str = "song.mp3, song.txt, song.html, song2.mp3, song.wmv, hi.mp3, hi.txt";
String convert = str.replaceAll(",","");
String convertArray[] = convert.split(" ");


자 여기까지 하면

convertArray[0] = "song.mp3"

convertArray[1] = "song.txt"


이런식으로 값이 들어가 있을겁니다


그럼 이제 반복문을 통해서

확장자가 .mp3 인지 확인

하면 되겠죠?


이렇게 하면 될 것 같습니다!

int j = 0;
String str = "song.mp3, song.txt, song.html, song2.mp3, song.wmv, hi.mp3, hi.txt";
String convert = str.replaceAll(",","");
String convertArray[] = convert.split(" ");

while(j<convertArray.length)
{
if(convertArray[j].matches("[a-zA-Z0-9`~!@#$%^&()-_=+|\\[\\]{};',. ]+\\.mp3\\b"))
{
Log.d("ITPANGPANG","mp3 파일은=>"+convertArray[j]);
}
j++;
}



맞겠죠?

맞을겁니다..


while문에서

j<convertArray.length

배열의 크기만큼 반복시켜주고


if문에서 matches에서

정규식을 넣어서 걸러내주면

되겠죠?


위의 정규식이 궁금하신분은

여기루!.


http://itpangpang.xyz/245



오늘은 여기서 끝!