[Java] 문자열(String) 생성/비교/타입 변환/메소드/입력받기/입력받을 때 주의할 점

소이뎁·2023년 9월 27일
1

Java

목록 보기
12/26
post-thumbnail

📍문자열(String) 생성

  • 문자열 리터럴 (String Literal) 사용 (권장): Heap 영역의 String constant pool에 저장, 공유 가능
  • 문자열 생성자 (String Constructor) 사용: Heap 영역에 저장, 공유 불가

1) 문자열 리터럴(String Literal) 사용

이미지 출처

package lesson08;

public class Ex01 {

	public static void main(String[] args) {
    	String str1 = "Hello";
		String str2 = "Hello";
		String str3 = "Class";
	}

}

2) 문자열 생성자(String Constructor) 사용

이미지 출처

package lesson08;

public class Ex01 {

	public static void main(String[] args) {
    	String str1 = new String("John");
		String str2 = new String("Doe");
	}

}

주의: 변수, 참조값, 실제 문자열 데이터가 저장되는 곳

  • 변수(str1, str2, str3)와 해당 변수가 참조하는 문자열 객체의 참조값은 stack에 저장된다.
  • 실제 문자열 데이터는 heap에 저장된다.

📍 문자열 비교하기

  • equals 사용

equals로 비교한다. ==로 비교하면 주소값 비교이므로 결과가 의도와 다르게 나올 수 있다.

package lesson08;

public class Ex01 {

	public static void main(String[] args) {
		String a = "안녕";
		String b = new String("안녕");
		
		System.out.println(a == b); // false
		System.out.println(a.equals(b)); // true
	}

}

📍 타입 변환

1) 숫자 -> String

  • String.valueOf() 메소드 사용(권장)
  • + 연산자 사용
package lesson08;

public class Ex02 {

	public static void main(String[] args) {
		int number1 = 3;
		
		// String.valueOf() 메소드 사용(권장)
		String str1 = String.valueOf(number1);
		
		// + 연산자 사용
		String str2 = number1 + "";
	}

}

2) String -> 숫자

  • Integer.valueOf() 메소드 사용
  • Integer.parseInt() 메소드 사용
package lesson08;

public class Ex02 {

	public static void main(String[] args) {
		String str1 = "5";
		
		// Integer.valueOf() 메소드 사용
		int number1 = Integer.valueOf(str1);
		
		// Integer.parseInt() 메소드 사용
		int number2 = Integer.parseInt(str1);
	}

}

📍 String 관련 유용한 메소드

메소드명설명반환값
charAt(index)문자열의 index번째 문자(char)를 얻는다.char
contains(특정 문자열)특정 문자열이 포함되어 있는지 확인boolean
startsWith(특정 문자열)특정 문자열로 시작하는지 확인boolean
endsWith(특정 문자열)특정 문자열로 끝나는지 확인boolean
length()문자열의 길이int
알파벳의 개수
replace(수정할 문자열, 새로운 문자열)문자열 중 일부를 교체String
바뀐 문자열 전체
split(특정 구분자)구분자를 기준으로 문자열을 잘라서 배열에 넣는다.String[]
substring(index)문자열을 index번째부터 맨 뒤까지 자른다.String
잘린 문자열
substring(s_index, e_index)s_index번째부터 e_index - 1번째까지 자른다.String
잘린 문자열

📍 문자열 입력받기

  • next(): 공백 문자 전까지의 읽음, 한 단어
  • nextLine(): 개행 문자 전까지 읽음, 한 줄

1) next()

package lesson08;

import java.util.Scanner;

public class Ex04 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.print("문자열을 입력하세요: ");
		String word = scan.next();
		System.out.println(word);

		scan.close();
	}

}

2) nextLine()

package lesson08;

import java.util.Scanner;

public class Ex04 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.print("문자열을 입력하세요: ");
		String line = scan.nextLine();
		System.out.println(line);

		scan.close();
	}

}

📍 문자열 입력받을 때 주의할 점

next(), nextLine()를 연달아 사용 시, 사용자 입력 버퍼에서 next()가 읽고 남아있는 개행 문자를 nextLine()이 자동으로 읽으므로, nextLine()의 입력을 받을 수 없다.

package lesson08;

import java.util.Scanner;

public class Ex04 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.print("문자열을 입력하세요: ");
		String word = scan.next();
		System.out.println(word);
		
		System.out.print("문자열을 입력하세요: ");
		String line = scan.nextLine();
		System.out.println(line);

		scan.close();
	}

}

해결

  • next()와 nextLine() 사이에 개행 문자를 소비하는 코드를 삽입한다.
  • nextLine()만 사용한다.

1) next()와 nextLine() 사이에 개행 문자를 소비하는 코드를 삽입한다.

package lesson08;

import java.util.Scanner;

public class Ex04 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.print("문자열을 입력하세요: ");
		String word = scan.next();
		System.out.println(word);
		
		scan.nextLine(); // 개행 문자 소비
		
		System.out.print("문자열을 입력하세요: ");
		String line = scan.nextLine();
		System.out.println(line);

		scan.close();
	}

}

2) nextLine()만 사용한다.

package lesson08;

import java.util.Scanner;

public class Ex04 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.print("단어를 입력하세요: ");
		String word = scan.nextLine();
		System.out.println(word);
		
		System.out.print("문자열을 입력하세요: ");
		String line = scan.nextLine();
		System.out.println(line);

		scan.close();
	}

}

References

🔗 https://www.geeksforgeeks.org/string-constant-pool-in-java
🔗 https://www.javatpoint.com/string-pool-in-java
🔗 https://deveric.tistory.com/123

0개의 댓글