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/
참고:
카이호스트만의 코어자바8
'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 |
댓글