String 클래스는 문자열의 추출, 비교, 찾기, 분리, 변환 등과 같은 다양한 메서드를 가지고 있다.
charAt() 메서드는 매개값으로 주어진 인덱스의 문자를 리턴한다.
charAt(6)은 "Hello Java"의 6번째 인덱스 위치에 있는 문자이다.
(여기서 띄어쓰기도 하나의 문자로 취급한다)
기본 타입(byte, char, short, int, long, float, double, boolean) 변수의 값을 비교할 때에는 == 연산자를 사용한다. 그러나 문자열 비교할 때에는 == 연산자를 사용하면 원하지 않는 결과가 나올 수 있다.
그래서 str2와 str3은 동일한 String 객체를 참조한다. 그러나 str1은 new 연산자로 생성된 다른 String 객체를 참조하게 된다.
변수 srt1과 str2의 ==연산은 false를 출력하고 str2와 str3의 ==연산은 true가 출력된다. ==연산자는 각 변수에 저장된 번지를 비교하기 때문에 이런 결과가 나온다.
만약 두 String 객체의 문자열만을 비교하고 싶다면 ==연산자 대신에 equals() 메서드를 사용해야 합니다.
네트워크로 문자열을 전송하거나, 문자열을 암호화할 때 문자열을 바이트 배열로 변환하는 경우가 있다. 문자열을 배열로 변환하는 메서드는 두 가지가 있다.
( getBytes() 메서드 , getBytes(Charset charset) )
바이트 배열을 다시 문자열로 변환(디코딩)할 때에는 어떤 문자셋으로 인코딩된 바이트 배열이냐에 따라서 디코딩 방법이 다릅니다. 단순하게 String(byte[] bytes) 생성자를 이용해서 디코딩하면 시스템의 기본 문자셋을 이용합니다. 시스템 기본 문자셋과 다른 문자셋으로 인코딩된 바이트 배열일 경우 다음 String 생성자를 이용해서 디코딩해야 합니다.
indexOf() 메서드는 매개값으로 주어진 문자열이 시작되는 인덱스를 리턴합니다. 만약 주어진 문자열이 포함되어 있지 않으면 -1을 리턴합니다.
첫 번째 출력문에서 6이 출력되는데 "Hello Java"에서 "Java"라는 문자열의 인덱스 위치가 6번째 이기 때문이다.
indexOf() 메서드는 if문의 조건식에서 특정 문자열이 포함되어 있는지 여부에 따라 실행코드를 달리할 때 자주 사용된다. -1 값을 리턴하면 특정 문자열이 포함되어 있지 않다는 뜻이다.
length() 메서드는 문자열의 길이를 리턴한다.
현재 문자열의 길이는 10으로 출력이 된다. subject 객체의 문자열 길이는 공백을 포함해서 10개이기 때문이다.
replace() 메서드는 첫 번째 매개값인 문자열을 찾아 두 번째 매개값인 문자열로 대치한 새로운 문자열을 생성하고 리턴한다.
String 객체의 문자열은 변경이 불가능한 특성을 갖기 때문에 replace() 메서드가 리턴하는 문자열은 원래 문자열의 수정본이 아닌 완전히 새로운 문자열이다. 출력문에서 출력한 문자열은 새로 생성된 "Hello 자바" 문자열을 참조하는 것이다.
substring() 메서드는 주어진 인덱스에서 문자열을 추출한다. substring() 메서드는 매개값의 수에 따라 두가지 형태로 사용 된다.
toLowerCase() 메서드는 문자열을 모두 소문자로 바꾼 새로운 문자열을 생성한 후 리턴한다.
toUpperCase() 메서드는 문자열을 모두 대문자로 바꾼 새로운 문자열을 생성한 후 리턴한다.
lowerCase 변수는 새로 생성된 “hello java” 문자열을 참조하고 upperCase 변수는 새로 생성된 “HELLO JAVA” 문자열을 참조한다. 이때 원래 original 변수의 “Hello Java” 문자열이 변경된 것은 아니다.
trim() 메서드는 문자열의 앞,뒤 공백을 제거한 새로운 문자열을 생성하고 리턴한다.
trim() 메서드는 앞뒤에 공백은 제거하지만 중간의 공백은 제거하지 않는다.
trim() 메서드를 사용한다고 해서 원래 문자열의 공백이 제거되는 것은 아니다. 새로운 문자열을 생성한 후 리턴하는 것이다.
valueOf() 메서드는 기본 타입의 값을 문자열로 변환하는 기능을 가지고 있다.
String 클래스에는 매개 변수의 타입별로 valueOf() 메서드가 다음과 같이 오버로딩 되어 있다.
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(double d)
static String valueOf(float f)