Java/[도서] 자바의 정석

String 클래스 메서드

Lea Hwang 2022. 4. 21. 23:45

자바의 정석

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 =      { 12345 };
Arrays.toString(arr);
출력) [12345 ]
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인터페이스라는 것은 이를 구현한 클래스들이 다 들어올 수 있다는 의미입니다. 

 

 


 

 

지금 당장 이 모든것을 외우기보다는 필요할 때마다 와서 체크하고 사용해보고 하는 게 좋을 것 같습니다. 

굵게 표시한 것은 제가 알고리즘을 풀면서 자주 등장했던 것인데요, 지금 당장 너무 많아 보인다면 제가 표시한 것만 보고 가셔도 도움이 될 것입니다. 

 

원래 계획은 책의 처음부터 정리할까 했지만 알고리즘을 풀면서 자주 등장 / 꼭 알고 있어야 할 기본 개념을 정리하는 게 더 효율적일 것 같았습니다. 독자가 보기에 순서가 뒤죽박죽 일 수도 있겠지만 그만큼 자주 등장한 개념을 정리한 것이므로 너그러이 이해해주시면 정말 감사하겠습니다^^