문자열은 자바에서 객체로 취급된다.
따라서 String 클래스에서 제공하는 method를 이용하여 문자열을 의도에 맞게 처리할 수 있다.

String str1 = new String("new String");
// String Methods
// charAt -> w
System.out.println(str1.charAt(2));
// length -> 10
System.out.println(str1.length());
// replaceAll -> New StriNg
System.out.println(str1.replaceAll("n", "N"));
// indexOf -> 4
System.out.println(str1.indexOf("S")); // 없으면 -1 반환
// toLowerCase, toUpperCase -> new string, NEW STRING
System.out.println(str1.toLowerCase());
System.out.println(str1.toUpperCase());
// substring -> new S, tring
System.out.println(str1.substring(0,5)); // 0이상 5미만 문자열 가져옴
System.out.println(str1.substring(5)); // 5이상 문자열 가져옴
String str = "new String";
for(int i=0;i<str.length();i++){
System.out.println(str.charAt(i));
}
문자열 비교
문자열은 객체이므로 비교연산자 ==를 통해 비교할 수 없고, 객체 비교 메서드인 equals()를 활용하여 비교하여야 한다.
같은 맥락에서 사전순 비교는 compareTo()메서드를 활용한다. compareTo()는 비교 대상들의 아스키 코드 값의 차를 이용하여 그 값을 반환하므로 비교 대상 문자열이 기준 문자열보다 작으면 음수를, 크면 양수를, 같으면 0을 반환한다.
// (a의 아스키코드 값) - (c의 아스키코드 값)
int result = "a".compareTo("c");
if(result == 0){
System.out.println("같은 문자열");
} else if(result < 0){
System.out.println("a가 c보다 사전순으로 앞에 있음");
} else{
System.out.println("a가 c보다 사전순으로 뒤에 있음");
}
구분자(delimiter)를 기준으로 문자열 분리
split()메서드를 활용한다.// [new, String]
System.out.println(Arrays.toString("new String".split("\\s+")));String 객체의 값을 변경하는 것은 불가능하며, 값을 변경하려면 새로운 String 객체를 생성해야 한다.String str = "String";
// str[2] 접근 불가능.
// str[3] = 'I'; 수정 불가능
// 인덱스로 접근 가능하지만 여전히 부분적인 수정이 불가능
System.out.println(str.charAt(2));
// ∴ 새 String을 만들어야 한다.
String alphabet = "ABCDFFG";
alphabet = alphabet.substring(0,4) + 'E' + alphabet.substring(5,7);
char[] 배열로 변환한 후 변경을 하고, 그 후 String 객체로 다시 생성해야 한다.String alphabet = "ABCDFFG";
char[] tempArr = alphabet.toCharArray();
tempArr[4] = 'E';
alphabet = new String(tempArr);
""로 생성한 문자열과 new로 생성한 문자열의 차이""로 생성한 문자열은 literal pool에 저장되고, new로 생성한 문자열은 heap memory에 저장된다. 따라서 두 문자열이 같은 내용이라도 == 연산자를 사용하여 비교하면 결과가 달라질 수 있다.""는 Literal Pool에 저장되므로 같은 문자열이 있으면 참조값이 동일하고, new로 생성한 문자열은 별도의 객체로 메모리에 저장된다.String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
| Method name | Return value | Description |
|---|---|---|
| charAt(int index) | char | 주어진 인덱스 위치의 문자를 반환 |
| length() | int | 문자열의 길이를 반환 |
| equals(Object anObject) | boolean | 두 문자열 값이 동일한지 비교 |
| compareTo(String anotherString) | int | 두 문자열을 사전순으로 비교한 결과 |
| toCharArray() | char[] | 문자열을 문자 배열로 변환 |
| toLowerCase() | String | 문자열을 모두 소문자로 변환한 새 문자열 |
| toUpperCase() | String | 문자열을 모두 대문자로 변환한 새 문자열 |
| contains(CharSequence s) | boolean | 문자열이 특정 부분 문자열을 포함하는지 확인 |
| replace(CharSequence target, CharSequence replacement) | String | 문자열 내 target을 모두 replacement로 바꾼 새 문자열 |
| split(String regex) | String[] | 정규 표현식에 맞는 부분으로 문자열을 분할한 배열 반환 |
| substring(int beginIndex, int endIndex) | String | 지정된 인덱스 범위에 해당하는 부분 문자열 반환 |
| indexOf(int ch, int fromIndex) | int | 주어진 인덱스부터 특정 문자가 나타나는 첫 번째 인덱스를 반환 |