1. 문자열(String)이란?
- 클래스(class)를 통해 문자열 타입으로 선언된다
- char 타입의 배열을 의미한다
- String 타입은 참조 자료형이다
2. String 클래스 선언
- 'String 참조변수 ; 참조변수 = "문자열"'의 형태로 선언 : 문자열 리터럴을 대입하는 방식
- 'String 참조변수 = "문자열"'의 형태로 선언 : 문자열 리터럴을 대입하는 방식
- 'String 참조변수 = new String("문자열")'의 형태로 선언 : 객체를 생성하고 문자열을 대입하는 방식
public class Grade {
public static void main(String[] args) {
String str;
str = "문자열";
System.out.println(str);
String str1 = "문자열1";
System.out.println(str1);
String str2 = new String("문자열2");
System.out.println(str2);
}
}
result
문자열
문자열1
문자열2
- 'String 참조변수 = "문자열"'의 형태로 선언
- 문자열 리터럴을 대입하는 방식의 주소값과 객체를 생성하는 방식의 주소값은 서로 다르다
- 그러므로, 문자열을 비교할 경우 등호"=" 대신 equals를 사용한다 ("=="은 저장공간의 주소를 비교하므로 문자열에 적합하지 않다)
public class Grade {
public static void main(String[] args) {
String str;
str = "문자열";
String str1 = "문자열";
String str2 = new String("문자열");
System.out.println(str==str1);
System.out.println(str==str2);
}
}
result
true
false
- 위에 코드에서 str==str1은 true로 같지만, str==str2는 false로 서로 다르다
3. String 특성
- String 문자열은 내용을 변경할 수 없다
- a = a+ b로 인하여 문자열 결합을 하였을 때 새로운 a의 저장공간이 생성된다
- a = a + b의 결과가 "문자열1"이 아닌 "문자열1문자열2"로 출력되며, a라는 새로운 저장공간이 생성된다
a = "문자열1";
b = "문자열2";
a = a + b;
System.out.println(a);
result
문자열1문자열2
- 수식에 의한 새로운 저장공간의 생성은 데이터의 처리 속도를 지연시킨다
- 문자열 변환이 필요한 변수에는 StingBuffer 메서드를 사용하는 것이 편리하다
- 같은 내용의 문자열 리터럴은 하나만 만들어진다
String a = "abc";
String b = "abc";
String c = "abc";
//문자열이 동일하므로 "abc" 저장공간 1개만 생성된다
4. String 관련 대표 method
1) charAt( )
- 해당 문자열의 특정 인덱스에 해당하는 문자를 반환한다
- 해당 문자열의 길이보다 큰 인덱스나 음수를 전달하면, 오류가 발생한다
public class Grade {
public static void main(String[] args) {
String str =new String("charAt method");
System.out.println("문자열 : "+ str);// "문자열 : charAt method""
System.out.println(str.charAt(0));// 'c'
System.out.println(str.charAt(4));// 'A'
System.out.println(str.charAt(6));// ' '
System.out.println(str.charAt(12));// 'd'
System.out.println(str.charAt(13));// 'error'
System.out.println("\ncharAt() 메서드 호출 후 문자열 : "+ str);
}
}
result
문자열 : charAt method
c
A
d
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 13
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
at java.base/java.lang.String.charAt(String.java:693)
at Grade.main(Grade.java:9)
//13번째문자열이 인덱스를 벗어났다고 에러 표시
public class Grade {
public static void main(String[] args) {
String str =new String("charAt method");
System.out.println("문자열 : "+ str);// "문자열 : charAt method""
System.out.println(str.charAt(0));// 'c'
System.out.println(str.charAt(4));// 'A'
System.out.println(str.charAt(6));// ' '
System.out.println(str.charAt(12));// 'd'
//System.out.println(str.charAt(13));// 'error'
System.out.println("\ncharAt() 메서드 호출 후 문자열 : "+ str);
}
}
result
문자열 : charAt method
c
A
d
charAt() 메서드 호출 후 문자열 : charAt method
//index 13을 주석 처리 후 정상 출력
2) compareTo( )
- 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교
- 문자열을 비교할 때 대소문자를 구분하여 비교한다
- 두 문자열이 같다면 0을 반환
- 해당 문자열이 인수로 전달된 문자열보다 작으면 음수를, 크면 양수를 반환
- - 문자열을 비교할 때 대소문자를 구분하지 않으려면 compareToIgnoreCase() 메서드를 사용
public class Grade {
public static void main(String[] args) {
String str =new String("abcde");
System.out.println("문자열 : "+ str);// "문자열 : charAt method""
System.out.println(str.compareTo("abcdef"));// 인수가 매개변수보다 작으므로 -1
System.out.println(str.compareTo("abcde"));// 인수와 매개변수가 같으므로 0
System.out.println(str.compareTo("abcd"));//인수가 매개변수보다 크므로 1
System.out.println(str.compareTo("aBcde"));// 'd'
System.out.println(str.compareToIgnoreCase("aBcde"+ str));
}
}
result
문자열 : abcde
-1
0
1
32
-5
3) contact( )
- 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환한다
- concatenate의 약자로 '연결한다'는 의미이다
- 인수로 전달된 문자열의 길이가 0이면, 해당 문자열을 그대로 반환한다
public class Grade {
public static void main(String[] args) {
String str =new String("concat");
System.out.println("문자열 : "+ str);
System.out.println(str.concat(" - method"));
System.out.println(str.concat(""));
System.out.println("concat() 메서드 호출 전 문자열 : "+ str);
}
}
result
문자열 : concat
concat - method
concat
concat() 메서드 호출 전 문자열 : concat
4) indexOf( )
- 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환한다
- 문자열의 대소문자를 구분한다
- 만약 해당 문자열에 전달된 문자나 문자열이 포함되어 있지 않으면 -1을 반환한다
public class Grade {
public static void main(String[] args) {
String str =new String("indexOf-method");
System.out.println("문자열 : "+ str);
System.out.println(str.indexOf('o'));//소문자 'o'의 위치값
System.out.println(str.indexOf('O'));//대문자 'O'의 위치값
System.out.println(str.indexOf('a'));//소문자 'a'의 위치값
System.out.println(str.indexOf("-"));//특수문자 '-'의 위치값
System.out.println("indexOf() 메서드 호출 후 원본 문자열 : "+ str);
}
}
result
문자열 : indexOf-method
12
5
-1
7
indexOf() 메서드 호출 후 원본 문자열 : indexOf-method
5) trim( )
- 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거한다
public class Grade {
public static void main(String[] args) {
String str =new String(" trim ");
System.out.println("문자열 : "+ str);
System.out.println(str +"end");
System.out.println("0"+str.trim()+"-end");
System.out.println("trim() 메서드 호출 후 문자열 : "+ str);
}
}
result
문자열 : trim
trim end
0trim-end
trim() 메서드 호출 후 문자열 : trim
6) toLowerCase()와 toUpperCase()
- toLowerCase() : 해당 문자열의 모든 문자를 소문자로 변환한다
- toUpperCase() : 해당 문자열의 모든 문자를 대문자로 변환한다
public class Grade {
public static void main(String[] args) {
String str =new String("toUpper/LowerCase");
System.out.println("문자열 : "+ str);
System.out.println(str.toLowerCase());
System.out.println(str.toUpperCase());
System.out.println("두 메서드 호출 후 문자열 : "+ str);
}
}
result
문자열 : toUpper/LowerCase
toupper/lowercase
TOUPPER/LOWERCASE
두 메서드 호출 후 문자열 : toUpper/LowerCase
7) 그 외 String 메서드 설명
char charAt(int index) | 해당 문자열의 특정 인덱스에 해당하는 문자를 반환함. |
String(char[ ] value) | 주어진 문자열(char[ ])을 갖는 String으로 변환한다 |
int compareTo(String str) | 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교함. |
int compareToIgnoreCase(String str) | 해당 문자열을 인수로 전달된 문자열과 대소문자를 구분하지 않고 사전 편찬 순으로 비교함. |
String concat(String str) | 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환함. |
int indexOf(int ch)int indexOf(String str) | 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환함. |
int indexOf(int ch, int fromIndex) int indexOf(String str, int fromIndex) |
해당 문자열에서 특정 문자나 문자열이 전달된 인덱스 이후에 처음으로 등장하는 위치의 인덱스를 반환함. |
int lastIndexOf(int ch) | 해당 문자열에서 특정 문자가 마지막으로 등장하는 위치의 인덱스를 반환함. |
int lastIndexOf(int ch, int fromIndex) | 해당 문자열에서 특정 문자가 전달된 인덱스 이후에 마지막으로 등장하는 위치의 인덱스를 반환함. |
String[] split(String regex) | 해당 문자열을 전달된 정규 표현식(regular expression)에 따라 나눠서 반환함. |
String substring(int beginIndex) | 해당 문자열의 전달된 인덱스부터 끝까지를 새로운 문자열로 반환함. |
String substring(int begin, int end) | 해당 문자열을 전달된 정규 표현식(regular expression)에 따라 나눠서 반환함. |
String toLowerCase() | 해당 문자열의 모든 문자를 소문자로 변환함. |
String toUpperCase() | 해당 문자열의 모든 문자를 대문자로 변환함. |
String trim() | 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거함. |
length() | 해당 문자열의 길이를 반환함. |
isEmpty() | 해당 문자열의 길이가 0이면 true를 반환하고, 아니면 false를 반환함. |
※ 참조
https://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html
java.lang (Java Platform SE 7 )
Interface Summary Interface Description Appendable An object to which char sequences and values can be appended. AutoCloseable A resource that must be closed when it is no longer needed. CharSequence A CharSequence is a readable sequence of char values.
docs.oracle.com
'JAVA' 카테고리의 다른 글
Java - 문자열 분리(StringTokenizer) (0) | 2022.05.29 |
---|---|
자료구조 - 스택(Stack) (0) | 2022.05.26 |
Java - 배열(array) (0) | 2022.05.22 |
Java - 변수(variable) (0) | 2022.05.22 |
Java - 타입(Type) (0) | 2022.05.19 |