일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- rxjava cold observable
- ANR이란
- 플러터 설치 2022
- 스택 자바 코드
- 안드로이드 os 구조
- 2022 플러터 안드로이드 스튜디오
- 멤버변수
- 안드로이드 유닛 테스트
- 안드로이드 라이선스
- android ar 개발
- Rxjava Observable
- 클래스
- 서비스 vs 쓰레드
- 안드로이드 레트로핏 사용법
- 큐 자바 코드
- 안드로이드 라이선스 종류
- 객체
- rxjava disposable
- jvm 작동 원리
- 안드로이드 유닛테스트란
- 서비스 쓰레드 차이
- rxjava hot observable
- 자바 다형성
- 안드로이드 유닛 테스트 예시
- 안드로이드 레트로핏 crud
- jvm이란
- ar vr 차이
- android retrofit login
- 스택 큐 차이
- 2022 플러터 설치
- Today
- Total
나만을 위한 블로그
[JAVA] 문자열 변환하는 방법 / 특정 문자열을 검색하는 방법 본문
앱을 만들다 보면 문자열을 가공해야 할 필요가 있다. 특히 중간에 특수문자가 껴 있어서 바꿔야 한다거나 등등이 그것이다.
이번 포스팅에선 자꾸 찾아보기도 귀찮은 문자열 변환 방법을 정리해두려고 한다.
- 문자열 검색
문자열을 검색한다고 썼는데, 이건 문자열에서 특정 문자열을 검사한다는 뜻이다.
이걸 수행하려면 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 |