String 클래스 메서드
2022. 4. 21. 23:45ㆍJava/[도서] 자바의 정석
자바의 정석
Chapter | 소제목 |
9. java.lang패키지와 유용한 클래스 | 1.1.2 String클래스 - 생성자와 메서드 |
알고리즘 문제를 풀 때 String클래스 메서드가 자주 쓰입니다.
이 메서드만 알고 있었어도 몇 시간을 단축할 수 있던 적이 있어서 이번 기회에 자바의 정석에 있는 내용을 정리하고 가려고 합니다.
메서드 / 설명 | 예제 | 결과 | |
String(char[] value) char[ ] → String 변환 |
char[ ] c = {'H', 'e', 'l', 'l', 'o'}; String s = new String(c); |
s = "Hello"; | char[ ] → String은 .toCharArray( ) 사용하여 변환 |
String(StringBuffer buf) StringBuffer → String 변환 |
StringBuffer sb = new StringBuffer("Hello"); String s = new String(sb) |
s = "Hello"; | |
char charAt(int index) 지정된 위치(index)에 있는 1개 문자를 반환 (index는 0부터 시작) |
String s = "Hello"; String n = "0123456"; char c = s.charAt(1); char c2 = n.charAt(1); |
c = 'e' c2 = '1' |
문자를 반환 |
int compareTo(String str) 문자열을 앞에서 부터 하나씩 사전순서로 비교, 같으면 0 왼쪽이 작으면 음수 오른쪽이 작으면 양수를 반환 |
int i = "aaa".compareTo("aaa"); int i2 = "aaa".compareTo("bbb"); int i3 = "bbb".compareTo("aaa"); |
i = 0 i2 = -1 i3 = 1 |
정렬시 사용 |
String concat(String str) 문자열을 뒤에 덧붙인다. |
String s = "Hello"; String s2 = s.concat(" World") |
s2 = "Hello World" | |
boolean contains(CharSequence s) 지정된 문자열(s)이 포함되었는지 검사 |
String s = "abcdfg"; boolean b = s.contains("bc"); |
b = true | ** 참고 ** |
boolean endsWith(String s) 지정된 문자열로 끝나는지 검사 |
String file = "Hello.txt"; boolean b = file.endsWith("txt"); |
b = true | |
boolean startsWith(String s) 주어진 문자열로 시작하는지 검사 |
String s= "java.lang.Object"; boolean b = s.startsWith("java"); boolean b2 = s.startsWith("lang"); |
b = true b2 = false |
|
boolean equals(Object o) 매개변수로 받은 문자열과 String인스턴스의 문자열을 비교 |
String s = "Hello"; boolean b = s.equals("Hello"); boolean b2 = s.equals("hello"); |
b = true b2 = false |
대소문자 구분함 |
boolean equalsIgnoreCase(String s) 문자열과 String인스턴스의 문자열을 대소문자 구분없이 비교 |
String s = "Hello"; boolean b = s.equalsIgnoreCase("Hello"); boolean b2 = s.equalsIgnoreCase("hello"); |
b = true b2 = true |
|
int indexOf(int ch) 주어진 문자가 문자열에 존재하는지 확인 후 위치(index)를 반환 못 찾으면 -1반환하며, index는 0부터시작 |
String s = "Hello"; int idx1 = s.indexOf('o'); int dx2 = s.indexOf('k'); |
idx1 = 4 idx2 = -1 |
위치를 반환 |
int indexOf(int ch, int pos) 주어진 문자가 문자열에 존재하는지를 검색시작위치(pos)부터 확인해서 위치(index)를 반환 못 찾으면 -1반환하며, index는 0부터시작 |
String s = "Hello"; int idx1 = s.indexOf('e', 0); int dx2 = s.indexOf('e', 2); |
idx1 = 1 idx2 = -1 |
|
int indexOf(String s) 주어진 문자열이 존재하는지 확인 후 그 시작 위치(index)를 알려준다. 못 찾으면 -1반환하며, index는 0부터시작 |
String str = "ABCDEFG"; int idx = s.indexOf("CD"); |
idx = 2 | |
int lastIndexOf(int ch) 지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서 부터 찾아서 위치(index)반환 못 찾으면 -1을 반환 |
String s = "java.lang.Object"; int idx1 = s.lastIndexOf('.'); |
idx1 = 9 | |
int lastIndexOf(String str) 지정된 문자열을 인스턴스의 문자열 끝에서부터 찾아 위치(index) 반환 못 찾으면 -1을 반환 |
String s = "java.lang.java"; int idx1 = s.lastIndexOf("java"); |
idx1 = 10 | |
int length() 문자열의 길이를 알려준다 |
String s = "Hello"; int length = s.length(); |
length = 5 | length : 배열의 길이 length() : 문자열의 길이 size() : 컬렉션프레임워크 타입의 길이 |
String replace(char old, char new) 문자열 중 문자(old)를 새로운 문자(new)로 바꾼 문자열을 반환 |
String s = "Hello"; String s1 = s.replace('H', 'C'); |
s1 = "Cello"; | |
String replace(CharSequence old, CharSequence new) 문자열 중 문자열(old)를 새로운 문자열(new)로 모두 바꾼 문자열을 반환 |
String s = "Hellollo"; String s1 = s.replace('ll', LL'); |
s1 = "HeLLoLLo" | 모두 변경 |
String replaceAll(String regex, String rep) 문자열 중에서 지정된 문자열(regex)과 일치하는 것을 새로운 문자열(rep)로 모두 변경 |
String ab = "AABBAABB"; String r = ab.replaceAll("BB", "bb"); |
r = "AAbbAAbb" | 모두 변경 |
String replaceFirst(String regex, Stirng rep) 문자열 중 지정되 문자열(regex)과 일치하는 것 중, 첫번째 것만 새로운 문자열(rep)로 변경 |
String ab = "AABBAABB"; String r = ab.replaceFirst("BB", "bb"); |
r = "AAbbAABB" | |
String[] split(Stirng regex) 문자열을 지정된 분리자(regex)로 나눈어 문자열을 배열에 담아 반환 |
String animals = "dog,cat,bear"; String[] arr = animals.split(","); |
arr[0] = "dog" arr[1] = "cat" arr[2] = "bear" |
배열에 담아 반환 |
String[] split(String regex, int limit) 문자열을 지정된 분리자(regex)로 limit만큼 나눈 후 문자열 배열에 담아 반환 |
String animals = "dog,cat,bear"; String[] arr = animals.split(",",2) |
arr[0] = "dog" arr[1] = "cat,bear" |
|
String substring(int begin) String substring(int begin, int end) 주어진 시작위치(begin)부터 끝 위치(end) 범위에 포함된 문자열을 반환한다. begin은 포함하고 end는 포함하지 않는다. end표기가 안 되어있을시 끝까지 반환 |
String s ="java.lang.Object"; String c = s.substring(10); String p = s.substring(5,9); |
c = "Object" p = "lang" |
|
String toString() String인스턴스에 저장되어 있는 문자열을 반환 |
String s = "Hello"; String s1 = s.toString(); |
s1 = "Hello" | int[] arr = { 1, 2, 3, 4, 5 }; Arrays.toString(arr); 출력) [1, 2, 3, 4, 5 ] |
String toUpperCase() String인스턴스에 저장되어 있는 모든 문자열을 대문자로 변환하여 반환 |
String s = "Hello"; String s1 = s.toUpperCase(); |
s1 = "HELLO" | |
String toLowerCase() String인스턴스에 저장되어 있는 모든 문자열을 소문자로 변환하여 반환 |
String s = "Hello"; String s1 = s.toLowerCase(); |
s1 = "hello" | |
String trim() 문자열의 왼쪽 끝과 오른쪽 끝에 있는 공백만 없애고 반환 |
String s = " Hello World "; String s1 = s.trim(); |
s1 = "Hello World" | 중간에 있는 공백들은 제거가 되지 않는다. |
static String valueOf(boolean b) static String valueOf(char c) static String valueOf(int i) static String valueOf(long l) static String valueOf(floar f) static String valueOf(double d) static String valueOf(object o) 기본형 → String문자열로 변환하여 반환 참조변수의 경우, toString()을 호출한 결과를 반환 |
String b = String.valueOf(true); String c = String.valueOf('a'); String i = String.valueOf(100); String l = String.valueOf(100L); String f = String.valueOf(10f); String d = String.valueOf(10.0); java.util.Date dd = new java.util.Date(); String date = String.valueOf(dd); |
b= "true" c = "a" i = "100" l = "100" f = "10.0" d = "10.0" date = "Fri Apr 22 22:46:34 KST 2022 " |
💡 매개변수 타입이 CharSequence라는 것의 의미는 무엇일까요?
우선 CharSequence는 interface입니다. interface의 장점 중에 "서로 관계없는 클래스들의 관계를 맺어줄 수 있다."는 점이 있습니다.
CharSequence인터페이스를 구현해놓고 → 이 인터페이스를 구현한 클래스들*을
매개변수로 해두면 다 들어갈 수 있습니다.
이렇게 하지 않으면 각각 클래스 타입으로 하는 매개변수 가진 메서드로 오버 로딩해야 합니다.
* 문자열 배열(char[])을 다루는 공통 조상이 없는 클래스들
CharBuffer, Segment, String, StringBuffer, StringBuilder
결론 : 매개변수 타입이 CharSequence인터페이스라는 것은 이를 구현한 클래스들이 다 들어올 수 있다는 의미입니다.
지금 당장 이 모든것을 외우기보다는 필요할 때마다 와서 체크하고 사용해보고 하는 게 좋을 것 같습니다.
굵게 표시한 것은 제가 알고리즘을 풀면서 자주 등장했던 것인데요, 지금 당장 너무 많아 보인다면 제가 표시한 것만 보고 가셔도 도움이 될 것입니다.
원래 계획은 책의 처음부터 정리할까 했지만 알고리즘을 풀면서 자주 등장 / 꼭 알고 있어야 할 기본 개념을 정리하는 게 더 효율적일 것 같았습니다. 독자가 보기에 순서가 뒤죽박죽 일 수도 있겠지만 그만큼 자주 등장한 개념을 정리한 것이므로 너그러이 이해해주시면 정말 감사하겠습니다^^
'Java > [도서] 자바의 정석' 카테고리의 다른 글
배열 오름차순, 내림차순 정렬하기 (0) | 2022.04.25 |
---|---|
형변환 (문자형↔정수형↔실수형) (0) | 2022.04.23 |
💡 10진수 ↔ 2진수, 8진수, 16진수 변환 방법 (0) | 2022.04.20 |
Arrays 클래스 (0) | 2022.03.28 |
[도서] 자바의 정석 큐레이션 (0) | 2022.03.28 |