String
인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없다.
이러한 객체를 자바에서는 불변 객체(immutable object)
라고 한다.
즉, 자바에서 덧셈(+) 연산자를 이용하여 문자열 결합을 수행하면, 기존 문자열의 내용이 변경되는 것이 아니라 내용이 합쳐진 새로운 String 인스턴스가 생성되는 것이다.
charAt()
메서드는 해당 문자열의 특정 인덱스에 해당하는 문자를 반환한다.
만약 해당 문자열의 길이보다 큰 인덱스나 음수를 전달하면, IndexOutOfBoundsException 오류가 발생한다.
String str = new String("Java");
System.out.println("원본 문자열 : " + str);
for (int i = 0; i < str.length(); i++) {
System.out.print(str.charAt(i) + " ");
}
System.out.println("\ncharAt() 메서드 호출 후 원본 문자열 : " + str);
// 실행 결과
// 원본 문자열 : Java
// J a v a
// charAt() 메서드 호출 후 원본 문자열 : Java
compareTo()
메서드는 해당 문자열을 인수로 전달된 문자열과 사전 순으로 비교한다.
이 메서드는 문자열을 비교할 때 대소문자를 구분하여 비교한다.
만약 두 문자열이 같다면 0 반환, 해당 문자열이 인수로 전달된 문자열보다 작으면 음수, 크면 양수 반환.
만약 문자열을 비교할 때 대소문자를 구분하지 않기를 원한다면, compareToIgnoreCase()
메서드 사용
String str = new String("abcd");
System.out.println("원본 문자열 : " + str);
System.out.println(str.compareTo("bcef"));
System.out.println(str.compareTo("abcd") + "\n");
System.out.println(str.compareTo("Abcd"));
System.out.println(str.compareToIgnoreCase("Abcd"));
System.out.println("compareTo() 메서드 호출 후 원본 문자열 : " + str);
// 실행 결과
// 원본 문자열 : abcd
// -1
// 0
// 32
// 0
// compareTo() 메서드 호출 후 원본 문자열 : abcd
concat()
메서드는 해당 문자열 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환한다.
만약 인수로 전달된 문자열의 길이가 0이면, 해당 문자열을 그대로 반환
String str = new String("Java");
System.out.println("원본 문자열 : " + str);
System.out.println(str.concat("수업"));
System.out.println("concat() 메서드 호출 후 원본 문자열 : " + str);
// 실행 결과
// 원본 문자열 : Java
// Java수업
// concat() 메서드 호출 후 원본 문자열 : Java
indexOf()
메서드는 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환한다.
만약 해당 문자열에 전달된 문자나 문자열이 포함되어 있지 않으면 -1을 반환한다.
indexOf() 메서드는 문자나 문자열을 찾을 때 대소문자를 구분
String str = new String("Oracle Java");
System.out.println("원본 문자열 : " + str);
System.out.println(str.indexOf('o'));
System.out.println(str.indexOf('a'));
System.out.println(str.indexOf("Java"));
System.out.println("indexOf() 메서드 호출 후 원본 문자열 : " + str);
// 실행 결과
// 원본 문자열 : Oracle Java
// -1
// 2
// 7
// indexOf() 메서드 호출 후 원본 문자열 : Oracle Java
trim()
메서드는 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거한다.
String str = new String(" Java ");
System.out.println("원본 문자열 : " + str);
System.out.println(str + '|');
System.out.println(str.trim() + '|');
System.out.println("trim() 메서드 호출 후 원본 문자열 : " + str);
// 실행 결과
// 원본 문자열 : Java
// Java |
// Java|
// trim() 메서드 호출 후 원본 문자열 : Java
toLowerCase()
메서드는 해당 문자열의 모든 문자를 소문자로 변환
toUpperCase()
메서드는 해당 문자열의 모든 문자를 대문자로 변환
String str = new String("Java");
System.out.println("원본 문자열 : " + str);
System.out.println(str.toLowerCase());
System.out.println(str.toUpperCase());
System.out.println("두 메서드 호출 후 원본 문자열 : " + str);
// 실행 결과
// 원본 문자열 : Java
// java
// JAVA
// 두 메서드 호출 후 원본 문자열 : Java
substring
메서드는 문자열 중 특정 부분을 뽑아낼 경우에 사용한다.
String a = "Hello Java";
System.out.println(a.substring(0, 4));
// 출력 결과
// Hell
substring(시작 위치, 끝 위치)을 사용하면 문자열의 시작 위치에서 끝 위치까지의 문자를 뽑아내게 된다.
단 끝 위치는 포함이 안된다.
boolean contains(CharSequence s)
String str = "my java test";
System.out.println(str.contains("java")); // true
System.out.println(str.contains(" my")); // false
split
메서드는 문자열을 특정 구분자로 분리하는 메서드이다.
String a = "a:b:c:d";
String[] result = a.split(":"); // result는 {"a", "b", "c", "d"}
위의 예처럼 "a:b:c:d"라는 문자열을 ":" 문자로 나누어 {"a", "b", "c", "d"} 문자열 배열을 만들 수 있다.
int n = 123;
String[] array = String.valueOf(n).split("");
for(String s : array) System.out.println(s);
// 출력 결과
// 1
// 2
// 3
공통점 : 양쪽에 있는 내용을 비교해서 boolean type
반환
equals()
는 메서드
==
연산자
equals
메서드
대상의 내용 자체를 비교
==
연산자
대상의 주소값을 비교
class Solution {
public String solution(String[] seoul) {
String answer = "";
String str = new String("김서방은 ");
for(int i = 0; i<seoul.length; i++){
if(seoul[i].equals("Kim")) {
answer = str.concat(String.valueOf(i)+"에 있다");
break;
}
}
return answer;
}
}
int a=12;
String A =String.valueOf(a);
System.out.println(A);
// 출력 결과
// 12
public String solution(String phone_number) {
char[] ch = phone_number.toCharArray();
}