반응형
문자열 생성 (2가지 방법 및 차이)
String str1 = "Test";
String str2 = "Test";
String str3 = new String("Test");
String str4 = new String("Test");
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str3 == str4); // false
- str1, str2와 같이 생성하면 "Test"라는 리터럴의 주소값을 가르키기 때문에 같다고 여겨짐 (=> Heap 메모리에 "Test" Literal이 올라감)
- str3, str4는 새로운 String 객체를 만드는 것이기 때문에 서로 다른 주소값을 가르킴 (=> Heap 메모리에 String Type 객체가 올라감)
문자열 비교 => eqauls()
String str1 = "Test";
String str2 = "Test";
String str3 = new String("Test");
System.out.println(str1.equals(str2)); // true 출력
System.out.println(str2.equals(str3)); // true 출력
- 문자열 str1과 str2를 비교하여 같으면 true, 다르면 false
System.out.println(str1 == str2);
- 이 방식으로 비교하면 true가 출력은 되지만 이 방식은 문자열 비교가 아닌 주소값을 비교하여 return해주는 방식이기 때문에, 문자열 비교에는 equals 메소드가 더 적합하다고 생각함
문자열 길이 => length()
int strLength = str.length();
str.length() 통해 int형 변수인 strLength에 문자열 str의 길이를 return
만약 str에 문자열 "Test"를 넣어줬다면 strLlength에는 4가 들어가게 됨
문자열이 비어있는가? => isEmpty()
System.out.println(str.isEmpty());
- 문자열 str이 비어있으면 true, 내용이 있으면 false
문자열 비교(사전순) => compareTo()
String str1 = "AAA";
String str2 = "BBB";
System.out.println(str1.compareTo(str2)); // -1 출력
str1이 str2보다 사전에 먼저 나오면 -1 return
str1이 str2보다 사전에 나중에 나오면 1 return
str1과 str2가 같으면 0 return
문자열에서 i번째 문자 반환 => charAt()
String str = "abcdea";
System.out.println(str.charAt(1)); // b 출력
- 문자열 str의 index가 1에 해당하는 문자인 'b' return
- 이 때, index는 0부터 시작
문자열에서 문자(문자열) 위치 찾기 => indexOf(), lastIndexOf()
String str1 = "abcdea";
String str2 = "bcd";
char c1 = 'a';
System.out.println(str1.indexOf(c1)); // 0 출력
System.out.println(str1.lastIndexOf(c1); // 5 출력
System.out.println(str1.indexOf(str2)); // 1 출력
System.out.println(str1.indexOf(c1, 3)); // 5 출력
- 문자열 str1에서 문자 c1(혹은 문자열str2)이 있는 첫번째/마지막 위치를 찾아 return
- 이 때, 주의할 점은 문자열의 index는 0부터 시작
- 만약 찾고자 하는 문자/문자열이 문자열에 없으면 -1 return
- 마지막 줄 코드는 문자열 str1에서 문자 c1을 찾는데 index를 3부터 찾는다는 의미
- index가 3 이상인 것 중에서 가장 먼저 문자 c1이 나오는 위치 return
- 따라서 0이 아닌 5가 출력됨을 볼 수 있음
문자열 안에 특정문자열이 포함되어 있는가? => contains()
String str1 = "abcdef";
String str2 = "def";
System.out.println(str1.contains(str2)); // true 출력
- 문자열 str1 안에 문자열 str2가 있으면 true, 없으면 false
문자열 합치기 => concat() / +
String str1 = "abc";
String str2 = "def";
String str3, str4;
str3 = str1.concat(str2);
str4 = str1 + str2;
System.out.println(str3); // abcdef 출력
System.out.println(str4); // abcdef 출력
- 문자열 str1 뒤에 문자열 str2를 붙여서 return
- concat 대신 '+' 기호로 처리해줘도 결과는 같다.
문자열 자르기 => substring()
String str1 = "abcdef";
System.out.println(str1.substring(2)); // cdef 출력
System.out.println(str1.substring(2, 5)); // cde 출력
- substring은 하나의 메소드인데 2가지 사용법이 존재
- 매개변수(parameter)가 하나인지 두개인지에 따라 return 값이 다름
- str1.substring( i ) : i번째 index부터 끝까지 출력
- str1.substring( i, j ) -> i번째 index부터 (j-1)번째 index까지 출력
문자열 치환 => replace()
String str1 = "abcdeab";
System.out.println(str1.replace('a', 'f')); // fbcdefb 출력
System.out.println(str1.replace("ab", "xy")); // xycdexy 출력
- 문자열 str1에서 문자 'a'를 모두 찾아 'f'로 바꿔준 문자열 return
- 문자열 str1에서 문자열 "ab"를 모두 찾아 "xy"로 바꿔준 문자열 return
- 주의할 점은 문자열 "ab"를 "x"로 바꾸는 것 처럼 길이가 달라도 되지만, 문자열 <-> 문자 치환은 안됨
문자열 분리 => split()
String str1 = "abc de";
System.out.println(str1.split(" ")[0]); // abc 출력
System.out.println(str1.split(" ")[1]); // de 출력
- "abcde"를 공백(" ")을 기준으로 나누면 "abc"와 "de"로 분리됨.
- 이 값들을 배열에 저장하여 return 해주는 방식으로 "abc"는 0번째 index에, "de"는 1번째 index에 저장되어 return
문자열 앞뒤 공백 제거 => trim()
String str1 = " abc de ";
System.out.println(str1.trim()); // "abc de" 출력
- trim은 문자열의 앞, 뒤의 공백들을 제거하여 return
- 문자열 중간의 공백은 제거하지 않음
문자열을 모두 대문자/소문자로 => toUpperCase(), toLowerCase()
String str1 = "aBcdE";
System.out.println(str1.toUpperCase()); // ABCDE 출력
System.out.println(str1.toLowerCase()); // abcde 출력
문자열 ↔ 숫자(int) 형변환
String str = "100";
int i = Integer.parseInt(str); // 문자를 숫자로 형변환
int i = 100;
String S = String.valueOf(i); // 숫자를 문자열로 형변환
- 위 형변환 방법 말고 다른방법들도 있겠지만 대표적인 것만 알아보자
반응형
'JAVA > 기본 문법' 카테고리의 다른 글
[JAVA] 접근 제한자, 정보은닉, Static, psvm (0) | 2021.08.17 |
---|---|
[JAVA] 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) (0) | 2021.08.16 |
[JAVA] 클래스와 객체 (+ 생성자, this, 객체 배열 사용법) (0) | 2021.08.16 |
[JAVA] 배열 + java.util.Arrays 패키지 활용 (1) | 2021.08.16 |
[JAVA] Hello, World! (Eclipse) (0) | 2021.08.10 |