버글버글
Java 수업 기록 (6) Java API - String(문자열) 본문
- Java API -
▶ String(문자열)
1. 문자열 동등 비교
- 같을 때 비교
String str1 = "hello"; String str2 = "hello"; boolean result1 = str1.equals(str2); System.out.println(result1); |
||
Console | true |
- 다를 때 비교
if(str1.equals(str2)) { System.out.println("str1, str2는 같아요"); } else { System.out.println("str1, str2는 달라요"); } |
||
Console | str1, str2는 같아요 |
** 문자열을 비교할때 비교연산 ( == )을 등호로 쓰면 안된다.
2. 대소문자를 무시한 문자열 동등 비교
- 예를 들면 ID 같은거의 대 소문자 무시
String str5 = "Hello World"; String str6 = "hELLO wORLD"; boolean result3 = str5.equalsIgnoreCase(str6); System.out.println(result3); |
||
Console | true |
* case 는 대소문자를 의미함
3. 문자열 길이 반환
String name = "홍길동"; int length = name.length(); System.out.println("글자수 : " + length); |
||
Console | 글자수 : 3 |
* 공백도 글자수에 포함이 된다.
* 아스키 코드에도 32번으로 등록되어 있다.
4. 특정 위치의 문자만 반환
1) 특정위치
2) 인덱스(Index)라고 한다.
3) 글자마다 부여된 정수값.
4) 0으로 시작 (첫번째 글자는 인덱스가 0이다.)
String name = "홍길동"; System.out.println(name.charAt(0)); System.out.println(name.charAt(1)); System.out.println(name.charAt(2)); |
||
Console | 홍 길 동 |
5. 문자열의 일부 문자열(String)을 반환
1) substring(begin) : 인덱스 begin(인덱스 포함)부터 끝까지 반환
2) substring(begin, end) : 인덱스 begin(인덱스 포함)부터 인덱스 end(불포함)까지 반환
String name = "홍길동"; System.out.println(name.substirng(0,1)); System.out.println(name.substring(1)); |
||
Console | 홍 길동 |
6. 특정 문자열을 찾아서 해당 인덱스(int)를 반환
*변수 이름을 idx 또는 i를 쓴다. (과장해서 거의 모든 개발자가)
1) indexOf
(1) 발견된 첫 번째 문자열의 인덱스를 반환
(2) 발견된 문자열이 없는 경우 -1을 반환
int idx1 = name.indexOf("홍"); int idx2 = name.indexOf("길동"); System.out.println(idx1); System.out.println(idx2); |
||
Console | 0 1 |
2) lastIndexOf
(1) 발견된 마지막 문자열의 인덱스를 반환
(2) 발견된 문자열이 없는 경우 -1을 반환
int idx3 = name.lastIndexOf("동"); int idx4 = name.lastIndexOf("길동"); System.out.println(idx3); System.out.println(idx4); |
||
Console | 2 1 |
7. 문자열이 특정 패턴으로 시작하는지 여부를 boolean(true, false) 반환
startWith(문자열)
if(name.startsWith("이")) { System.out.println("이씨입니다."); } else { System.out.println("이씨가 아닙니다."); } |
||
Console | 이씨가 아닙니다. |
8. 문자열이 특정 패턴으로 끝나는지 여부를 boolean(true, false) 반환
startWith(문자열)
예시) jpg, png로 끝나면 이미지로 가정
String filename = "image.jpg"; if(filename.endsWith("jpg") || filename.endsWith("png")) { System.out.println("이미지입니다."); } else { System.out.println("이미지가 아닙니다."); } |
||
Console | 이미지입니다. |
9. 문자열이 특정 패턴을 포함하는지 여부를 boolean(true, false) 반환
endWith(문자열)
String email = "hoh1011@naver.com"; if(email.contains("@") && email.contains(".")) { System.out.println("이메일입니다."); } else { System.out.println("이메일이 아닙니다."); } |
||
Console | 이메일입니다. |
10. 불필요한 공백 제거(좌우 공백)
- 중간 공백은 제거하지 않는다. 앞 뒤만 제거함.
String message = " 안녕 하세요 "; System.out.println(message.trim(); System.out.println(message.trim()).length()); } |
||
Console | 안녕 하세요 7 |
11. 대소문자 변환하기
1) toUpperCase() : 대문자로 변환하기
2) toLowerCase() : 소문자로 변환하기
String source = "best of best"; System.out.println(source.toUpperCase()); System.out.println(source.toLowerCase()); |
||
Console | BEST OF BEST best of best |
* 소스가 변하는게 아니라, 이 메소드를 사용했을때 이렇게 나옵니다. 를 알려줌
12. 찾아바꾸기
1) replace(old, new) : old를 찾아서 new로 변환하기
String source = "best of best"; String replaced = source.replace("best", "worst"); System.out.println(source); System.out.println(replaced); |
||
Console | best of best worst of worst |
* 소스는 그대로 인것을 확인할 수 있다.
주의) replaceAll() 메소드는 특정 문자열을 찾아서 변환하는 것이 아님.
- 아래 예시는 192_168_10_101_91로 변화하는 것을 기대 할 수 있지만, 출력은 ______________ 로 된다.
- 착각해서 사용하면 된통 당한다.
- 아직은 왜 이렇게 되는지 이해를 하지 않아도 된다. 문자열을 의미하는게 아니라는 것만 알고 있으면 된다.
String ip = "192.168.101.91"; String replacedIp = ip.replaceAll(".", "_"); System.out.println(replacedIp); |
||
Console | ______________ |
13. 빈 문자열인지 여부를 검사한 뒤 boolean(true, false) 반환
String id = " "; if(id.isEmpty()) { System.out.println("빈 문자열"); } else { System.out.println("빈 문자열 아님"); } if(id.trim().isEmpty()) { System.out.println("빈 문자열"); } else { System.out.println("빈 문자열 아님"); } |
||
Console | 빈 문자열 아님 빈 문자열 |
* is.Blank는 자바11 버전 이후 추가 된 것이다.
* 대중화 된 버전은 1.8 버전이여서, 이 메소드를 쓴다면 낭패를 볼 것이다.
* 사용 안하는 것을 추천한다.
* 최신 코드는 항상 조심하여야 한다.
String 클래스의 메소드는 상당이 많으며, 아직도 더 남아있다.....
▶ StringBuilder
1. java.lang.StringBuilder 클래스
- StringBuilder를 쓰는 이유는 단순히 성능이 좋기 때문이다.
StringBuilder sb = new StringBuilder(); sb.append(1); sb.append(true); sb.append('T'); sb.append(3.14); sb.append("hello"); System.out.println(sb); System.out.println(sb.equals("1trueT3.14hello")); |
||
Console | 1trueT3.14hello false |
String result = sb.toString(); System.out.println(result); System.out.println(result.equals("1trueT3.14hello")); |
||
Console | 1trueT3.14hello true |
* 중요 포인트 : append 한다음에 toString만 하면 된다.
StringBuilder가 쓰이는 이유에 대한 예시)
- String과 StringBuilder의 성능 테스트
- 아래의 코드는 공부 해야 할 게 아니라, 성능차이를 눈으로 비교해보라는 의미이다.
* String
String alphabet1 = ""; long begin1 = System.nanoTime(); for(char ch = 'a'; ch <= 'z'; ch++) { alphabet1 += ch; } long end1 = System.nanoTime(); System.out.println((end1 - begin1) + alphabet1); |
||
Console | 21800abcdefghijklmnopqrstuvwxyz |
* StringBuilder
StringBuilder sb2 = new StringBuilder(); long begin2 = System.nanoTime(); for(char ch = 'a'; ch <= 'z'; ch++) { sb2.append(ch); } long end2 = System.nanoTime(); String alphabet2 = sb2.toString(); System.out.println((end2 - begin2) + alphabet2); |
||
Console | 1800abcdefghijklmnopqrstuvwxyz |
* 걸린 시간이 12배나 줄어든다.
'java > java 수업 기록' 카테고리의 다른 글
Java 수업 기록 (8) 배열(Array) (0) | 2022.07.28 |
---|---|
Java 수업 기록 (7) Java API - Scanner (0) | 2022.07.27 |
Java 수업 기록 (5) Java API - 난수, timestamp 등 (0) | 2022.07.23 |
Java 수업 기록 (4) 반복문(for, while), break, continue (0) | 2022.07.22 |
Java 수업 기록 (3) 분기문(if, if-else, else if, switch) (0) | 2022.07.21 |