String Method
✅ String is immutable
reference type, 값을 바꿔도 저장한 다른 값에 영향을 미친다.
💡 length()
문자열 길이 반환
1
2
3
4
String str= "Hello"
int int1 = str.length(); //int1= 5;
int int2= "World".length(); //int2= 5;
💡 isEmpty()
, isBlank()
isEmpty()
는 길이가 0인가?
isBlank()
는 글자라고 칠 만한 것이 있는가?
1
2
3
4
5
6
7
8
9
10
11
12
13
String str1 = ""; //진짜 아무것도 없음
String str2 = " \t\n"; //enter, tab, spacebar있음.
int int1 = str1.length(); //int1= 0;
int int2 = str2.length(); //int2= 3;
// 💡isEmpty : 문자열의 길이가 0인지 여부
boolean bool1 = str1.isEmpty(); //int1은 0이니까 true
boolean bool2 = str2.isEmpty(); //int2는 3이니까 false
// 💡isBlank : 공백(white space)을 제외한 문자열의 길이가 0인지 여부
boolean bool3 = str1.isBlank(); //str1안에 글자 없음 true
boolean bool4 = str2.isBlank(); //str2안에도 글자는 없음, true
💡 trim()
글자만 남기고 공백 제거, 글자 사이 공백은 여전히 남아 있음.
그리고 trim해도 원본은 바뀌지 않음.
만약 원본도 바꾸고 싶다면…원래 변수에 바꾼 변수 다시 대입해 주기
1
2
String str4 = str3.trim(); //str3 공백 지워서 str4에 저장, str3은 바뀌지 않았음.
str3 = str3.trim(); //원본도 바꾸기
💡 charAt()
String은 char[] 배열을 가진다.
charAt()
는 char을 반환
1
2
3
4
5
String str = "도레미파솔라시";
char ch = str.charAt(0); //도
//가장 마지막 글자
char chLast= str.charAt(str.length() -1); //시
💡 indexOf()
어느 위치에 있는가?
indexOf()
는 int를 반환
💡 만약 찾고자 하는 문자가 포함이 안 되어 있다면? -1 반환
1
2
3
4
String str= "도레미파솔라시도"
int int1 = str.indexOf('레'); //1;
int int2 = str.indexOf('솔', 4); //index4 이후에 솔 찾음
💡 lastIndexOf()
언제 마지막으로 이 문자 또는 문자열이 등장하는가?
1
int int3 = str.indexOf("도"); //7
💡 equals()
, equalsIgnoreCase()
equals()
: 대소문자 구분하여 string 똑같은지 비교
equalsIgnoreCase()
: 대소문자 무시하고 string 똑같은지 비교
1
2
3
4
5
String str_a1 = "Hello World";
String str_a2 = "HELLO WORLD";
boolean bool_a1 = str_a1.equals(str_a2) //false
boolean bool_a2 = str_a1.equalsIgnoreCase(str_a2); //true
💡 contains()
찾는 문자가 포함되어 있는가?
💡 startsWith()
, endsWith()
이 문자로 시작하는가? 끝나는가?
1
2
3
4
String str_b1 = "옛날에 호랑이가 한 마리 살았어요.";
boolean bool_b5 = str_b1.startsWith("호랑이", 4);
//ture
//4번째 index부터가 "호랑이"로 시작하는지 확인함.
💡 matches()
특정 형식을 유지하는지 확인(이메일, 비밀번호 등)
exmaple: 비밀번호에는 특수문자 1개, 대문자 1개 들어가야 함~
1
2
3
4
5
6
7
8
//이게바로 이메일 형식 확인하는 코드임.
String emailRegex = "^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$";
String str_c1 = "yalco@yalco.kr"
String str_c2 = "yalco.yalco.kr";
boolean bool_c1 = str_c1.matches(emailRegex); //true
boolean bool_c2 = str_c2.matches(emailRegex); //false
💡 compareTo()
, compareToIgnoreCase()
사전순을 기준으로 양수나 음수를 반환한다.
☑️ 시작하는 값이 같다면, 글자 길이를 파악해서 더 긴지, 짧은지 int반환
1
2
3
4
5
6
7
String str_a1 = "ABC";
String str_a2 = "ABCDE";
int int_a1 = str_a1.compareTo(str_a1); //똑같은 문자열 비교하니까 0
int int_a2 = str_a1.compareTo(str_a2); //a1은 3이고, a2는 5니까 a1이 2더 짧음 ➡️ -2
☑️ 시작하는 부분 값이 다르다면, 첫 글자의 정수값 차이 반환
숫자가 클수록 사전상 앞에 오는 것이다.
1
2
3
4
5
6
7
String str_a1 = "ABC"
String str_a4 = "HIJKLMN"
int int_a6 = str_a1.compareTo(str_a4);
// int_a6: -7
//ABCDEFGH 니까 A는 1번, H는 8번.
// 1 - 8 = -7
💡 toUpperCase()
, toLowerCase()
대문자, 소문자로 반환
⭐️ 만약 한 String에서 다른 String을 대소문자 상관없이 포함하고 있는지 알고 싶다면?
두 String 모두 toUpperCase()
한다음 contains
쓰기
💡 concat()
string 뒤로 이어붙여 이어주기
1
2
3
4
String str_a1 = "밥 먹고";
String str_a2 = "똥싸고";
String str_a3 = str_a1.concat(str_a2);
concat()
🆚 +
1
2
3
4
5
6
7
8
9
10
11
12
String str_a3 = str_a1.concat(str_a2);
String str_a4 = str_a1 + str_a2;
boolean bool_b1= str_a3.equals(str_a4);
//true
//그냥 + 로도 문자열 이어붙일 수 있음. concat이랑 같은 기능.
//그러나 concat에는 문자열만 이어붙일 수 있음, 다른 datatype은 ❌
//+는 문자열 아닌 다른 datatype도 이어붙일 수 있음 ⭕️
String str_b1 = "ABC";
String str_b2 = str_b1 + true + 1 + 2.34 + '가';
String str_b3 = str_b1.concat(true); //❌
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//concat은 다중연산시 생성되는 instance의 수가 다르다.
//concat은 매 번 문자열을 반환
String str_d1 = "a" + "b" + "c" + "d"; // "abcd"
// + 연산은 내부적으로 아래와 같이 최적화됨
String str_d2 = new StringBuilder("a")
.append("b")
.append("c")
.append("d")
.toString(); // "abcd"가 생성됨
// "a", "b", "c", "d", "abcd"가 생성되어 메모리 차지
// concat은 매 번 문자열을 반환하므로
String str_d3 = "a"
.concat("b") // "ab"가 생성됨
.concat("c") // "abc"가 생성됨
.concat("d"); // "abcd"가 생성됨
// "a", "b", "c", "d", "ab", "abc", "abcd"가 생성되어 메모리 차지
⭐️ 메서드 체이닝
여러 메서드를 이어서 사용하는 것
문자열을 반환하기 때문에 또 그 문자열에 메서드를 사용할 수 있는 것이다.
만약 메서드가 문자열이 아닌 다른 data type을 반환한다면 사용할 수 없는 기능
1
2
3
4
5
String str_a6 = str_a1
.concat(str_a2)
.concat(str_a1)
.concat(str_a2);
//밥 먹고 똥 싸고 밥 먹고 똥 싸고
💡 repeat()
문자열을 주어진 정수만큼 반복
💡 substring()
~번째 문자부터 (~번째 문자까지) 잘라서 반환
1
2
String str_b1 = "대한민국 다 job 구하라 그래";
String str_b3 = str_b1.substring(7, 10); //job
💡 replace()
, replaceAll()
, replaceFirst()
주어진 앞의 문자(열)을 뒤의 문자(열)로 치환
1
2
String str_c3 = "밥 좀 먹자, 응? 야, 밥 좀 먹자고 밥 밥 밥";
String str_c4 = str_c3.replace('밥', '빵');
💡 toCharArray()
문자열을 분할하여 문자의 배열로 반환
1
2
3
4
String str1 = "가나다라마";
String str2 = "010-1234-5678";
char[] chAry1 = str1.toCharArray();
//[가, 나, 다, 라, 마]
💡 join()
문자열 배열의 요소들을 주어진 기준으로 하나로 이어 붙임.
1
2
3
4
5
6
7
8
String[] strings = {"가", "나", "다", "라", "마"};
String join1 = String.join(", ", strings);
//"가, 나, 다, 라, 마 "
String join2 = String.join("-", strings);
//"가-나-다-라-마"
String join3 = String.join(" 그리고 ", strings);
//"가 그리고 나 그리고 다 그리고 라 그리고 마"
💡 split()
주어진 기준으로 (~개까지) 분할하여 문자열 배열로 반환
1
2
3
4
5
6
7
String str1 = "가나다라마";
String str2 = "010-1234-5678";
String[] strAry1 = str1.split("");
//["가", "나", "다", "라", "마"]
String[] strAry2 = str2.split("-");
//"-"을 기준으로 분할해서 배열로 만드세요.
//["010", "1234", "5678"]