String

자바에서 문자열을 나타내는 자료형

출처

// 리터럴 표기법
String a = "Hello, world!";
String b = "a";
String c = "123";

// 아래와 같이 표현할 수도 있다.
String a = new String("Hello, world!");
String b = new String("a");
String c = new String("123");

new 키워드는 객체를 만들 때 사용한다. 하지만 보통 문자열을 표현할 때는 가급적 첫번째 방식(리터럴 표기)을 사용하는 것이 좋다. 첫 번째 처럼 사용하면 가독성에 이점이 있고 컴파일 시 최적화에 도움을 주기 때문이다.



01. 원시(Primitive) 자료형

원시 자료형은 아래와 같이 있으며, 원시 자료형은 new 키워드로 그 값을 생성할 수 없다.

  • int
  • long
  • double
  • float
  • boolean
  • char
boolean result = true;
char a = 'A';  // char 자료형은 홑따옴표 사용 ''
int i = 100000;

원시자료형은 위와 같이 리터럴(literal)로만 값을 세팅할 수 있다. String 은 “Happy Java” 와 같이 리터럴로 표기가 가능하지만, primitive자료형은 아니다. String은 리터럴 표현식을 사용할 수 있도록 자바에서 특별대우해주는 자료형이다.

02. 원시 자료형의 Wrapper 클래스

원시자료형 Wrapper 클래스
int Integer
long Long
double Double
float Float
boolean Boolean
Char Char

앞으로 공부할 ArrayList, HashMap, HashSet 등은 데이터를 생성할때 원시 자료형 대신 그에 대응하는 Wrapper 클래스를 사용해야 한다. 원시 자료형 대신 Wrapper 클래스를 사용하면 값 대신 객체를 주고 받을 수 있어 코드를 객체 중심적으로 작성하는데 유리하다. 또한 멀티스레딩 환경에서 동기화를 지원하기 위해서도 Wrapper 클래스는 반드시 필요하다.

03. 문자열(String) 내장 메서드

String built-in API 에 대해 알아보자

equals

indexOf

contains

charAt

replaceAll

substring

toUpperCase

split

equals

  • 두 개의 문자열이 동일한지 비교하여 true/false 값을 리턴
String a = "hello";
String b = "java";
String c = "hello";

System.out.println(a.equlas(b));  // false
System.out.println(a.equlas(c)); // true

문자열 a 와 b 는 “hello” 와 “java” 로 서로 같지 않다. 따라서 equals 메서드 호출 시 false 리턴

문자열의 값을 비교할때는 반드시 equals 를 사용해야 한다. == 연산자를 사용할 경우 다음과 같은 경우가 발생할 수 있다.

String a = "hello";
String b = new String("hello");

System.out.println(a.equals(b)); // true
System.out.println(a == b); // false

문자열 a, b 는 모두 “hello” 로 값은 값을 가지지만,

  • equals 는 true
  • == 연산자는 false

a 와 b는 값은 같지만 서로 다른 객체이다. ==두개의 자료형이 동일한 객체인지를 판별할 때 사용하는 연산자이기 때문에 false를 리턴한다.

equals 는 값만 비교하는 반면, == 연산자는 동일한 객체인지 판별, 즉. 메모리 주소값까지 같은지를 비교하는것 같다.

python의 is 랑 비슷해보이는 느낌이다..



indexOf

  • 문자열에서 특정 문자열이 시작되는 위치(인덱스) 리턴
String a = "Hello Java";

int result = a.indexOf("Java");
System.out.println(result) // 6



contains

  • 문자열에서 특정 문자열이 포함되어 있는지의 여부를 리턴
String a = "Hello Java";
boolean result = a.contains("Java");

System.out.println(result); // true

문자열 a는 “Java” 라는 문자열을 포함하고 있기 때문에 true 를 리턴한다.



replaceAll

  • 문자열 중 특정 문자열을 다른 문자열로 바꾸고자 할 때 사용
String a = "Hello Java";
String result = a.replaceAll("Java", "World");

System.out.println(result);  // Hello World

“Hello Java” 문자열에서 “Java” 를 “World” 로 바꾸었다.



subString

  • 문자열 중 특정 부분을 뽑아낼 경우 사용
String a = "Hello Java";
String result = a.substring(0, 4);

System.out.println(result);  // Hell 출력

끝 위치 4 는 포함되지 않는다. (시작위치 <= a < 끝위치)



toUpperCase

  • 문자열을 모두 대문자로 변경할 때 사용
  • 소문자로 변경할 때는 toLowerCase 사용
String a = "Hello Java";
System.out.println(a.toUpperCase());  // HELLO JAVA;



split

  • 문자열을 특정 구분자로 나누어 문자열 배열로 리턴하는 메서드
String a = "a:b:c:d";
String[] result = a.split(":");  // result = {"a", "b", "c", "d"}

: 로 나누어 문자열 배열을 만들 수 있다.



04. 문자열 포매팅

  • 숫자 바로 대입

문자열 포매팅은 String.format 메서드를 사용한다.

String result = String.format("I eat %d apples.", 3);  // %d = digit 문자열 포맷 코드
System.out.println(result)  // "I eat 3 apples."
  • 문자열 바로 대입
String result = String.format("I eat %s apples.", "five");
System.out.println(result);  // I eat five apples.

05. 문자열 포맷 코드

코드 설명
%s 문자열(String)
%c 문자 1개(character)
%d 정수 (Integer)
%f 부동소수 (floating-point)
%o 8진수
%x 16진수
%% Literal % (문자 % 자체)

댓글남기기