JAVA_48_String 클래스
-
문자열 생성 방법(리터럴vs.new)
-
String.equals() : 내용비교
-
문자열, 문자 초기화
-
인덱스 검색(문자 반환)
: charAt() -
문자열 비교
: compareTo(), equals(), equalsIgnoreCase() -
문자열 결합
: + , concat(), join() -
문자열 검색
: contains(), endsWith(), startsWith(), indexOf(), lastIndexOf() -
문자 검색
: indexOf(), lastIndexOf() -
길이
: length() -
문자열 분할
: split(), substring() -
대문자/소문자로
: toUpperCase(), toLowerCase() -
공백제거
: trim() -
문자열로 변환
: + "" , valueOf()
String 클래스
-
문자열을 다루기 위한 클래스
-
= 데이터(char[]
, 문자배열) + 메소드(문자열 관련)
-
내용을 변경할 수 없는 클래스
String a = "a";
String b = "b";
a = a+b;
문자열을 다루기 위한 클래스
= 데이터(char[]
, 문자배열) + 메소드(문자열 관련)
내용을 변경할 수 없는 클래스
String a = "a";
String b = "b";
a = a+b;
a = a+b;
(X)
(O)
-
✨따라서 덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어진다.
-
✨✨문자열 결합이나 변경이 잦다면,
StringBuffer
이용!!!- 내용 변경가능한 클래스이기 때문
문자열 생성방법 비교
1) 문자열 리터럴
String s1 = "aaa"; //문자열 리터럴 "aaa" 객체의 !주소!가 참조변수 s1에 저장됨
String s2 = "aaa"; //문자열 리터럴 "aaa" 객체의 !주소!가 참조변수 s2에 저장됨
-
문자열 리터럴은 프로그램 실행 시 자동으로 생성된다.
->constant pool
(상수 저장소)에 저장 -
우리가 따로 만들지 않더라도 자동으로 객체가 생성됨!
-
✨같은 내용의 문자열의 리터럴은 ✨하나만 만들어진다.
-> ✨✨여러 참조변수가 공유
따라서
s1 == s2? true;
//0x100 == 0x100 니까
s1.eqauls(s2)? true;
//String의 equals()는 주소비교가 아니라 !내용비교!
2) new 연산자
String s1 = new String("aaa"); //새로운 String인스턴스 생성
String s2 = new String("aaa"); //새로운 String인스턴스 생성
- 서로 다른 객체 가리킴
따라서
s1 == s2? false;
//0x100 == 0x200 니까
s1.eqauls(s2)? true;
//String의 equals()는 주소비교가 아니라 !내용비교!
주의!
== 연산자 | Object의 equals() | String의 equals() |
---|---|---|
주소비교 | 주소비교 | 내용비교 |
. | . | Object의 equals()를 오버라이딩 한 것 |
빈 문자열
-
내용이 없는 문자열
-
크기가 0인 char형 배열을 저장하는 문자열
-
길이가 0인 char배열
char[] chArr = char[0];
- 길이가 0인 int배열
int[] iArr = {};
- ✨문자char와 문자열String의 초기화
(X) 비권장
String s = null;
char c = '\u0000';
//이건 유니코드
String s1 = new String("");
String s2 = new String("");
String s3 = new String("");
(O) ✨✨✨
char c = ' ';
//공백으로 초기화
String s1 = "";
String s2 = "";
String s3 = "";
- 메모리 낭비가 없다.
char[] ⇄ String
- 문자 배열 ⇄ 문자열
char[] → String
String(char[] value)
- 생성자
char[] c = {'h', 'e', 'l', 'l', 'o'};
String s = new String(c);
->
s = "hello"
String → char[]
toCharArray()
StringBuffer ⇄ String
StringBuffer → String
String(StringBuffer sbf)
- 생성자
StringBuffer sbf = new StringBuffer("hello");
String s = new String(sbf);
->
s = "hello"
String → StringBuffer
...나중에...
charAt()
char charAt(int index)
- 문자열의 인덱스에 해당하는 문자 뱉는 메소드
String s = "hello";
char c = s.charAt(1);
->
c = 'e'
compareTo()
int compareTo(String str)
- 문자열끼리 사전순서로 비교하여 같으면
0
, ✨왼쪽항이 더빠르면-1
, 더 느리면1
int a = "aaa".compareTo("bbb");
->
a = -1
너무 많다.
필요한 게 있으면
concat()
String concat(String str)
- 문자열 바로 뒤에 문자열 결합
String s1 = "hello";
String s2 = s1.concat(" world");
->
s2 = "hello world"
contains()
boolean contains(CharSequence s)
-
지정된 문자열
s
가 포함되어 있으면true
, 아니면false
-
CharSequence
: 인터페이스
-> 문자배열을 다루는 클래스들은 공통조상이 없으므로, 인터페이스인CharSequence
를 공통조상처럼 함으로써 문자배열 클래스들을 한꺼번에 다룰 수 있게 된다!
String s = "abcdef";
boolean b = s.contains("bc");
->
b = true
endsWith(), startsWith()
boolean endsWith(String suffix)
- 지정된 문자열
suffix
로 끝나는지 검사 (true
/fasle
)
String s = "Hello.txt";
boolean b = s.endsWith("txt");
->
b = true
boolean startsWith(String prefix)
- 지정된 문자열
prefix
로 시작하는지 검사(true
/fasle
)
String s = "java.lang.Object";
boolean b = s.startsWith("java");
boolean b2 = s.startsWith("lang");
->
b = true
b2 = false
equals()
boolean eqauls(Object obj)
-
obj
와 문자열 비교하여 같으면true
, 다르면false
-
Object클래스의
equals()
오버라이딩
equalsIgnoreCase()
boolean equalsIgnoreCase(String str)
- 대소문자 구분없이 문자열 비교
String s = "HELLO";
boolean b = s.equalsIgnoreCase("helLO");
->
b = true
indexOf(int c)
int indexof(int ch)
- 문자
ch
가 해당 문자열에 존재하는지 확인하여 위치(0 ~
) 반환 - 존재하지 않으면
-1
반환
String s = "Hello";
int idx1 = s.indexOf('o');
int idx2 = s.indexOf('k');
->
idx1 = 4
idx2 = -1
indexOf(int, int)
int indexOf(int ch, int pos)
- 문자열의 지정된 위치
pos
부터 시작하여 주어진 문자ch
가 존재하는지 확인하여 위치(0 ~
) 반환 - 존재하지 않으면
-1
반환 pos = 0
이면 처음부터 조사
String s = "Hello";
int idx1 = s.indexOf('e', 1);
int idx2 = s.indexOf('e', 2);
->
idx1 = 1
idx2 = -1
indexOf(String)
int indexOf(String str)
- 주어진 문자열
str
이 존재하는지 시작위치(0 ~
) 반환 - 존재하지 않으면
-1
반환
String s = "ABCDE";
int idx = s.indexOf("CD");
->
idx = 2
lastIndexOf(int c)
int lastIndexOf(int ch)
- 뒤에서 찾기
lastIndexOf(String)
int lastIndexOf(String str)
- 뒤에서 찾기
length()
int length(String str)
- 문자열의 길이 반환
split(String)
String[] split(String regex)
-
문자열을 지정된 분리자
regex
로 나눠 ✨문자열배열에 저장해 반환 -
regex(Regular Expression) : 정규식
String animals = "dog, cat, bear";
String[] sArr = animals.split(",");
->
sArr[0] = "dog"
sArr[1] = "cat"
sArr[2] = "bear"
split(String, int)
String[] split(String regex, int limit)
- ✨문자열 전체를 지정된 수
limit
를 배열의 길이로 한다.
- ✨문자열 전체를 지정된 수
String animals = "dog, cat, bear";
String sArr[] = animals.split(",", 2);
->
sArr[0] = "dog"
sArr[1] = "car, bear";
substring()
String substring(int begin)
- 주어진 시작위치
begin
부터 끝까지 포함된 문자열 얻기
String substring(int begin, int end)
- 주어진 시작위치
begin
부터 끝위치 ✨end - 1
✨까지 포함된 문자열 얻기
String s = "java.lang.Object";
String c = s.substring(10); //index=10부터 끝까지
String p = s.substring(5, 9); //index=5 ~ 8 까지
->
c = "Object"
p = "lang"
toUpperCase()
String toUpperCase()
- 대문자로
toLowerCase()
String toLowerCase()
- 소문자로
trim()
String trim()
- 문자열의 왼쪽끝과 오른쪽끝(처음과 끝)에 있는 공백 제거한 문자열 반환
String s = " hello world ";
String s1 = s.trim();
->
s1 = "hello world"
valueOf()
static String valueOf(기본타입 기본형)
static String valueOf(Object obj)
- 지정된 값을 문자열로 변환하여 반환
- 참조변수의 경우 ✨
toString()
을 호출한 결과 반환 - 각 리퍼클래스마다 다 있다! JAVA_06 참고
java.util.Date dd = new java.util.Date();
String date = String.valueOf(dd);
->
date = "Wed Jan 27 21:26:29 KST 2016"
join()
String join(String regex, String[] arr)
- 해당 배열의 문자열
arr
을 구분자regex
로 구분해서 결합, 문자열 반환 - ✨구분자는 제일 마지막에 수행
- 해당 ✨✨문자열배열을 매개변수로
- 구분자를 안 넣고 그냥 결합을 원하면
regex == ""
빈문자열!! - 여러 문자열도 결합 가능하다. 구분자를 제외한 나머지는 다 결합하는 문자열들!
String animals = "dog, cat, bear";
String[] sArr = animals.split(",");
String str = String.join("-", sArr);
String s1 = "100";
String s2 = "200";
String str2 = String.join("!", s1, "+", s2, "=");
//"s1+s2="를 ! 로 구분짓기
String str3 = String.join("", s1, "+", s2, "=");
->
str = "dog-cat-bear"
str2 = "100!+!200!="
str3 = "100+200="
Ref
Author And Source
이 문제에 관하여(JAVA_48_String 클래스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lecharl/JAVA48저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)