Skip to content

Latest commit

 

History

History
201 lines (192 loc) · 32.9 KB

string.md

File metadata and controls

201 lines (192 loc) · 32.9 KB

String 클래스

  Java를 접하기 전에 C를 접했다면 문자열을 다룰 때 '문자열 타입이 하나 있으면 되지, 왜 이렇게 귀찮게 사용해야 하지?' 라는 생각을 한번쯤은 해봤을 것이다. 문자열을 다루기 위해 char 배열이나 포인터를 사용해야 했다. 하지만 Java는 우리가 그토록 원했던 String Type을 제공, 정확히는 String Class를 미리 구현해 놓았다.

public final class String implements java.io.Serializable, Comparable {
    private char[] value;
    // . . .
}

  한편, String 클래스는 저장된 문자열을 읽어올 수만 있고, 변경할 수는 없는 immutable 클래스다. 예를 들어 '+' 연사자를 이용해서 문자열을 결합하는 경우는 객체 내의 문자열을 바꾸는게 아니라 새로운 문자열이 담긴 String 객체를 생성하는 것이다. 따라서 문자열을 결합하는 것은 메모리 공간을 낭비하는 것과 같으므로 결합횟수를 최대한 줄이는 것이 좋다. 추가로 결합이나 추출 등 문자열을 다루는 작업이 많을 경우엔 String 클래스 대신 StringBuffer 클래스를 사용하는 것이 좋다.

String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");

System.out.println(s1==s2);
System.out.println(s3==s4);

  위의 코드를 보자. 1, 2열은 문자열 리터럴 "abc"의 주소에 객체를 저장한 사례이고, 3, 4열은 새로운 String 객체를 생성한 사례다. 따라서 s1과 s2는 같은 문자열 "abc"의 주소를 가리키고 있고, s3와 s4는 같은 문자열이지만 서로 다른 주소를 가지고 있다. 위 코드를 실행해 출력 결과를 확인하면 완벽히 이해갈 것이다.


String 클래스의 메서드

Method Explain Example code Example Value
char charAt(int index) 지정된 인덱스에 있는 문자 리턴   c = 'e'
int compareTo(String str) 문자열과 사전순서로 비교하여 이전이면 음수, 이후면 양수 리턴 int i = "aaa".compareTo("aaa");
int ii = "aaa".compareTo("bbb");
int iii = "bbb".compareTo("aaa");
i = 0
ii = -1
iii = 1
String concat(String str) 문자열을 뒤에 덧붙여서 리턴 String s = "Hello";
String s2 = s.concat(" !");
s2 = "Hello !"
boolean contains(CharSequence c) 지정된 문자열이 포함돼 있는지 리턴 String s = "abcd";
boolean b = s.contains("bc");
b = true
boolean endsWith(Stringsuffix) 지정된 문자열로 끝나는지 리턴 String s = "abcd";
boolean b = s.endsWith("d");
b = true
boolean equals(Object obj) 문자열 비교 결과 리턴 String s = new String("abc");
String s1 = new String("abc");
boolean b = s.equals(s1);
b = true
boolean equalsIgnoreCase(String str) 문자열과 String 객체의 문자열을 대소문자 구분없이 비교하여 리턴 String s = new String("abc");
String s1 = new String("ABC");
boolean b = s.equalsIgnoreCase(s1);
b = true
int indexOf(int ch) 주어진 문자가 문자열에 존재하는지 확인하여 인덱스 리턴 String s = "Hello";
int idx1 = s.indexOf('o');
int idx2 = s.indexOf('q');
idx1 =  4
idx2 = -1
int indexOf(int ch, int pos) 주어진 문자가 문자열에 존재하는지 정된 위치부터 확인하여 인덱스 리턴 String s = "Hello";
int idx1 = s.indexOf('e', 0);
int idx2 = s.indexOf('e', 2);
idx1 =  1
idx2 = -1
int indexOf(String str) 주어진 문자열이 존재하는지 확인하여 인덱스 반환 String s = "ABCDE";
int idx = s.indexOf("BC);
idx = 1
String intern( ) 문자열을 상수풀에 등록 String s1 = new String("abc");
String s2 = new String("abc");
boolean b = 
            (s1.intern( ) == s2.intern( );)
b = true
int lastIndexof(char ch) 지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서부터 찾아서 인덱스 리턴 String s = "Hello";
int idx = s.lastIndexOf('l');
idx = 3
int lastIndexOf(String str) 지정된 문자열을 객체의 문자열 끝에서 부터 찾아서 인덱스 리턴 String s = "Hello";
int idx = s.lastIndexOf("ll");
idx = 2
int length( ) 문자열의 길이 리턴 String s = "Hello";
int len = s.length();
len = 5
String replace(char old,  char new) old를 new로 바꾸어 리턴 String s = "Hello";
String rs = s.replace('e', 'a');
rs = "Hallo"
String replace(CharSequence old, CharSequence new) 문자열 중 old를 new로 바꾸어 리턴 String s = "Hellollo";
String rs = s.replace("ll", "LL");
re = "HeLLoLLo"
String replaceAll(String regex, String replacement) 문자열 중 지정된 문자열과 일치하는 것을 새로운 문자열로 모두 변경하여 리턴 String ab = "AABBAABB";
String s1 = ab.replaceAll("BB", "bb");
r = "AAbbAAbb"
String replaceFirst(String regex, String replacement) 문자열 중 지정된 문자열과 일치한 것 중, 첫번째 것만 새로운 문자열로 변경하여 리턴 String ab = "AABBAABB";
String s1 = ab.replaceFirst("BB", "bb");
r = "AAbbAABB"
String[] split(String regex) 문자열을 지정된 분리자로 나누어 문자열 배열에 담아 리턴 String s = "010,1234,5678"
String[] arr = s.split(",");
arr[0] = "010"
arr[1] = "1234"
arr[2] = "5678"
String[] split(String regex, int limit) 문자열을 지정된 분리자로 나누어 문자열 배열에 담아 리턴하는데, 문자열 전체를 지정된 수로 자름 String s = "010,1234,5678"
String[] arr = s.split(",", 2);
arr[0] = "010"
arr[1] =
     "1234, 5678"
static String join(String r, String[] s) 여러 문자열 사이에 구분자를 넣어서 결합 후 리턴 String s = "010,1234,5678"
String[] arr = s.split(",");
String str = String.join("-", arr)
str =
  010-1234-5678
boolean startsWith(String prefix) 주어진 문자열로 시작하는지 리턴 String s = "abcd";
boolean b = s.endsWith("a");
b = true
String substring(int begin)
String substring(int begin, int end)
시작 위치부터 끝 위치 범위에 포함된 문자열 리턴 String s = "I like Java";
String c = s.substring(3, 6);
c = "ike "
String toLowerCase( )
String toUpperCase( )
String 객체에 저장된 문자열을 소문자(또는 대문자)로 변환하여 반환 String s = "abCdE";
String l = s.toLowerCase();
String u = s.toUpperCase();
l = "abcde"
u = "ABCDE"
String toString( ) String 객체에 저장돼 있는 문자열 반환 String s = "Hello";
String s1 = s.toString();
s1 = "Hello"
String trim( ) 문자열 양쪽 끝에 있는 공백을 제거하여 리턴 String s = "   Hi         ";
String rs = s.trim();
rs = "Hi"
static String valueOf(type t) 지정된 값을 문자열로 변환하여 반환 String s = String.valueOf(true);
java.util.Date dd = new java.util.Date();
String s2 = String.valueOf(dd);
s1 = "true"
s2 =
"Mon Jul 19 01:
50:30 KST 2021"