본문 바로가기
DEV/Java

[자바] 3. 문자열

by 어쩌다개발 2022. 1. 13.
반응형

 

3. 문자열

3.1. 문자열 연결

1) 문자열 + 숫자

String str = "65"; 
int num = 25; 
System.out.println(str + num);

결과값은 65+25 = 90이 아닌, 6525가 출력된다.
덧셈 연산자는 두 개의 피연산자 중 하나라도 String이면, 결과는 String이다.

2) 문자+숫자

char ch = 'A'; 
int num = 3; 
System.our.pintln(ch + num);

결과값은 68이 출력된다. 
자바는 유니코드를 사용하지만, 유니코드의 앞 부분이 아스키코드와 호환되기 때문에 'A' 등의 영문자는 아스키 코드와 번호가 같다.
byte보다 int인 1이 더 크기 때문에 byte를 int로 형변환 한 후 저장하는데, 알파벳 대문자 'A'를 숫자로 변환하면 65가 되고 65+3=68이 출력된다.

3) 여러 문자열을 구분자로 결합

여러 문자열을 구분자로 구분해서 결합할 때, join 메서드를 사용할 수 있다.

//첫번째 인자 : 분리 문자열, 두번째 인자: 결합하고 싶은 문자열(갯수 상관x, 배열 전달 가능)
String names = String.join("! ", "잘생긴게", "최고", "짜릿해"); 
System.out.println(names);

결과: 잘생긴게! 최고! 짜릿해

4) 문자 연결

여러 문자를 연결할 때 +로 문자를 연결하는 건 비효율적이다. 이때는 StringBuilder를 사용하면 효율적이다.
String은 객체다. 객체를 더할때는 메모리 할당과 해제를 계속 발생시키기 때문에 성능적으로 좋지 않다.

객체는 한번 생성되면 변경이 불가능 하기 때문에, 하나의 문자열을 또 다른 문자열과 연결하면 새 문자열이 생성되고, 이전 문자열은 가비지 컬렉터로 들어간다.

StringBuilder는 String과 다르게 새로운 문자열을 생성하는게 아니라 기존의 데이터에 더하는 방식을 사용하기 때문에 속도도 빠르며 상대적으로 부하가 적다.

StringBuilder builder = new StringBuilder();
builder.append("행복하지 않다면").append(" 그건 월급이").append(" 부족해서 입니다.");
System.out.println(builder);

결과 : 행복하지 않다면 그건 월급이 부족해서 입니다.

5) 문자열 비교

두 문자열이 같은지 검사하려면 == 말고 equals를 사용해야 한다.
String은 객체이므로, ==로 비교할 때는 같은 객체일때만 true를 반환한다.
가상 머신에는 각 리터럴 문자열의 인스턴스가 오직 한개씩만 있어서 ==로 비교해도 true가 된다.

String str = "Hello world";
String subStr = str.substring(6, 11);

System.out.println(subStr); //world

System.out.println("world".equals(subStr)); //true
System.out.println("world" == subStr); //false

substr처럼 계산된 결과의 경우, 별도의 String 객체에 저장되면서 ==로 비교했을 때 false를 반환한다.
null을 비교할 떄는 ==를 사용해야 한다.

String str2 = null;
System.out.println(str2.equals("world"));


null은 문자열이 아니므로 equals가 제공되지 않는다.
그러므로 비교 기준이 되는 String에 null이 올 수 있는 경우 nullPointerException이 일어난다.

String str2 = null;
System.out.println("world".equals(str2));

문자열을 리터럴 문자열과 비교할 때는 리터럴 문자열이 기준 문자열이 되게 한다.
대소문자를 구별하지 않고 두 문자열을 비교하고 싶다면 equalsIgonoreCase 메소드를 활용하면 된다.

6) 숫자와 문자열 사이 변환

정수를 문자열로 Integer.toString
정수를 담고 있는 문자열을 숫자로 변환 Integer.parseInt
부동소수점을 문자열로 Double.toString
부동소수점을 담고 있는 문자열을 부동소수점으로 변환 Double.parseDouble

참고)  "" + n처럼 빈 문자열과 정수를 연결하여 변환할 수 있지만, 개발자 중 일부는 이 방법을 선호하지 않으며, 효율성도 떨어진다.

7) 유용한 문자열 메서드

boolean startsWith(String str)
boolean endWith(String str)
boolean contains(CharSequence str)
문자열이 지정한 문자열로 시작/종료하거나 지정한 문자열을 포함하는지 검사한다.
int indexOf(String str)
int lastindexOf(String str)
int indexOf(String str, int fromIndex)
int lastIndexOf(String str, int fromIndex)
전체 문자열이나 fromIndex에서 시작하는 부분 문자열을 검색해서 str이 처음 또는 마지막으로 나타난 위치를 얻는다.
일치하는 부분을 찾지 못하면 -1을 반환한다.
String replace(CharSequence oldString
, CharSequence newString)
oldString이 나타난 부분을 모두 newString으로 교체한 문자열을 반환한다.
String toUpperCase()
String toLowerCase()
원본 문자열의 모든 문자가 대문자 또는 소문자로 변환된 문자열을 반환한다.
String trim() 앞뒤 공백을 모두 제거한 문자열을 반환한다,

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

참고:

카이호스트만의 코어자바8

https://hardlearner.tistory.com/288

https://hardlearner.tistory.com/288

반응형

'DEV > Java' 카테고리의 다른 글

[자바] 사용자 정의 예외 만들기  (2) 2023.02.01
[자바] default method 와 static method  (2) 2023.02.01
[자바] 4. 배열 리스트  (0) 2022.01.15
[자바] 2. 자료형 & 연산자  (0) 2022.01.13
[자바] 1. 기본 프로그래밍 구조  (0) 2022.01.11

댓글