•
String 은 char[] 형태이다.
→ char[] 에 저장된 숫자로 ASCII 코드를 호출해 문자열을 저장한다.
Java에는 수많은 메서드가 있다. → 결국 Data를 컨트롤하기 위해 존재
String도 똑같이 Data를 컨트롤하기 위해 있다.
•
String 은 리턴타입이 다양하다.
String 클래스 사용법
1.
리터럴을 정의
String s1 = "Java";
String s2 = "Java";
String s3 = "Hey hey";
Java
복사
리터럴로 정의하게 되면, 메모리의 Method Area에 리터럴이 올라가게 된다.
String 이 리터럴로 선언되면, 컴파일러는 해당 " " 안에 있는 내용과 같은 내용이 있는지 Method Area에서 찾아보고, 같은 내용이 있을 경우 그 선언 또한 같은 주소를 바라보게 한다.
Method Area 에는 "Java" 가 올라가고, s1 은 "Java" 가 있는 곳의 주소(ex. x1000)를 담는다.
s2 가 선언될 때, 컴파일러는 "Java" 가 Method Area 에 있는지 확인하고, "Java" 가 있으므로 s2 도 "Java" 가 있는 곳의 주소(ex. x1000)를 담게 된다.
예제 코드
public class StringClassTest {
public static void main(String[] args) {
String s1 = "java";
String s2 = "java";
if(s1 == s2){
System.out.println("s1과 s2는 같습니다."); // 리터럴 비교
} else {
System.out.println("s1과 s2는 다릅니다.");
}
}
}
Java
복사
결과 화면
s1과 s2는 같습니다. // 둘 다 Method Area의 "java"를 가리키고 있다.
Java
복사
2.
객체 생성
String s1 = new String("Java");
String s2 = new String("Java");
Java
복사
위 같은 경우, s1 은 s1 만의 "Java" 가 담긴 주소를 가리키고 있고
s2 은 s2 만의 "Java" 가 담긴 주소를 가리키고 있다.
예제 코드
public class StringClassTest {
public static void main(String[] args) {
String s3 = new String("java");
String s4 = new String("java");
if(s3 == s4){
System.out.println("s3과 s4는 같습니다.");
} else {
System.out.println("s3과 s4는 다릅니다."); // 객체 주소값 비교
}
if(s3.equals(s4)){
System.out.println("s3과 s4는 같습니다."); // equals()를 쓰면 문자열을 비교
} else {
System.out.println("s3과 s4는 다릅니다.");
}
}
}
Java
복사
결과 화면
s3과 s4는 다릅니다. // == 연산자는 객체의 주소값을 비교한다.
s3과 s4는 같습니다. // equals() 메서드는 문자열을 비교한다.
Java
복사
String 내부 문자열을 비교하고 싶다면 equals() 메서드를 이용!
String 클래스의 다양한 메서드
1. charAt()
•
String 문자열의 n 번째 문자를 출력
public class StringClassTest_2 {
public static void main(String[] args) {
String subject = "자바 프로그래밍";
char charValue = subject.charAt(1); // 입력한 값의 1번째
System.out.println(charValue);
}
}
Java
복사
결과 화면
바
Java
복사
2. indexOf()
•
" " 안의 문자열이 나오는 첫 번째 인덱스 리턴
public class StringClassTest_2 {
public static void main(String[] args) {
String str3 = "the cat is on the table";
// indexOf: table 을 찾아서 table 이 있는 첫번째 인덱스
int index = str3.indexOf("table");
// 값이 없을때는 -1 리턴
System.out.println(index);
}
}
Java
복사
결과화면
18
Java
복사
3. length()
•
문자열의 길이 리턴
public class StringClassTest_2 {
public static void main(String[] args) {
String str4 = "the cat is on the table";
int length = str4.length();
System.out.println("length of str4: " + length);
}
}
Java
복사
결과화면
length of str4: 23
Java
복사
•
length() 응용예제 → stringCount()
•
stringCount() 는 배열 내의 String 의 수를 센다.
public class StringClassTest_2 {
public static void main(String[] args) {
String[] strArr = {"봄", "여름", "가을"};
int total = stringCount(strArr);
System.out.println(total);
}
}
Java
복사
결과화면
5
Java
복사
4. trim()
•
String 맨 앞, 맨 뒤의 공백을 제거한다.
public class StringClassTest_2 {
public static void main(String[] args) {
String trimStr = " I Love You ! ";
System.out.println(trimStr + " 길이: " + trimStr.length());
System.out.println(trimStr.trim() + " 길이: " + trimStr.trim().length());
}
}
Java
복사
결과화면
I Love You ! 길이: 14
I Love You ! 길이: 12
Java
복사
5. split()
•
특정 문자를 기준으로 String 을 나누어서 배열에 저장한다.
public class StringClassTest_2 {
public static void main(String[] args) {
// "," 기준으로 String을 나누어 배열에 저장
String[] tokens = "100,200,300".split(",");
for (String token:tokens) {
System.out.println(token);
}
}
}
Java
복사
결과
100
200
300
Java
복사
6. valueOf()
•
어떤 타입이든 String Type 으로 바꾼다.
•
함수 이름으로 저장이 가능하다.
public class StringClassTest_2 {
public static void main(String[] args) {
// String 타입 "100"으로 바꾼다
String str5 = String.valueOf(100);
System.out.println(str5);
// 소수점 있는건 double 이 호출되고 String 타입인 "10.0"으로 변환된다
String str6 = String.valueOf(10.0);
System.out.println(str6);
// "false"로 바뀌시겠지!
String str7 = String.valueOf(false);
System.out.println(str7);
}
}
Java
복사
결과
100 // 전부 String이다.
10.0
false
Java
복사
parseInt() 도 있다.
•
String 을 Int 형으로 변환한다.
public class StringClassTest_2 {
public static void main(String[] args) {
String str8 = "100";
int num2 = Integer.parseInt(str8);
System.out.println("parseInt(str8): " + num2);
}
}
Java
복사
결과
parseInt(str8): 100 // int 형으로 변환되었다.
Java
복사
String equals() 활용 어’절’ 개수 확인하는 프로그램
import java.util.Scanner;
// 어절 개수 구분하는 프로그램
// try / catch 문 사용
public class StringClassTest_3 {
public static void main(String[] args) {
Readline readline = new Readline();
while (true) {
readline.Read();
if (readline.getInput().equals("그만")) {
System.out.println("종료합니다...");
break;
}
System.out.println("어절 개수는 " + readline.countWord());
}
}
}
class Readline {
Scanner sc = new Scanner(System.in);
public String getInput() {
return input;
}
private String input;
private String[] word;
public void Read() {
this.input = sc.nextLine();
}
public int countWord() {
this.word = this.input.split(" ");
return word.length;
}
}
Java
복사
결과 화면
어쩔 아니고 어절입니다
어절 개수는 3
자바는 좋은 언어라고 생각합니다. 안그런가요?
어절 개수는 5
그만
종료합니다...
Java
복사
•
입력된 값을 split() 메서드로 띄어쓰기인 " " 을 기준으로 쪼개서 배열에 저장한다.
•
length() 메서드로 저장된 배열의 길이를 리턴한다. → 배열의 크기 = 어절의 개수
•
equals() 메서드로 "그만" 이 입력되었을 때 프로그램이 종료되도록 한다.
•
Scanner 의 nextLin() 은 한 문장을 띄어쓰기 구분 없이 입력받는 메서드이다.