///////
Search

String 클래스

날짜
2022/09/29
텍스트
Stringchar[] 형태이다.
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
복사
위 같은 경우, s1s1 만의 "Java" 가 담긴 주소를 가리키고 있고
s2s2 만의 "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() 도 있다.
StringInt 형으로 변환한다.
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() 메서드로 "그만" 이 입력되었을 때 프로그램이 종료되도록 한다.
ScannernextLin() 은 한 문장을 띄어쓰기 구분 없이 입력받는 메서드이다.