String 클래스는 char배열에 메서드를 추가한 것이다.
한 번 생성된 String인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경할 수는 없다.
'+'를 사용해서 문자열을 결합하는 것은 매 연산 시 마다 새로운 문자열을 가진 String인스턴스가 생성된다.
문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많이 필요한 경우에는 StringBuffer클래스를 사용하는 것이 좋다.
StringBuffer인스턴스에 저장된 문자열은 변경이 가능함.
💜 문자열 생성
1. 문자열 리터럴 지정
String str="abc";
2. String클래스의 생성자를 사용
String str=new String("abc");
3. 빈 문자열로 초기화
String s="";
생성자 | 설명 | 예제 | 결과 |
String(String s) | 문자열s를 갖는 String인스턴스 생성 | String s=new String("hello"); | s="hello" |
String(StringBuffer buf) | StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의 String인스턴스 생성 | StringBuffer sb=new StringBuffer("hello"); String s=new String(sb); |
s="hello" |
찾기 메서드 | 설명 | 예제 | 결과 |
int length() | 문자열의 길이를 알려줌 | String s="Hello"; int length=s.length(); |
length=5 |
char charAt(int index) | 지정된 위치(index)에 있는 문자를 알려줌 | String s="hello"; char c=s.charAt(1); |
c='e' |
String substring(int begin) String substring(int begin, int end) |
시작위치(begin)부터 끝 위치(end) 범위에 포함된 문자열을 얻음. 끝 위치의 문자는 포함되지 않음 |
String s="java.lang.Object"; String c=s.substring(10); |
c="Object" |
boolean contains(CharSequence s) | s가 포함되었는지 검사 | String s="abcdef"; boolean b=s.contains("bc"); |
b=true |
boolean startsWith(String prefix) | 주어진 문자열(prefix)로 시작하는지 검사 | String s="java.lang.Object"; boolean b=s.startsWith("java"); |
b=true |
boolean endsWith(String suffix) | suffix로 끝나는지 검사 | String file="hello.txt"; boolean b=file.endsWith("txt"); |
b=true |
int indexOf(int ch) | 문자 ch가 문자열에 존재하는지 확인하여 위치 알려줌 못 찾으면 -1 반환 |
String s="hello"; int idx=s.indexOf('o'); |
idx=4 |
int indexOf(int ch, int pos) | 문자 ch가 문자열에 존재하는지 지정된 위치(pos)부터 확인하여 위치를 알려줌 못 찾으면 -1 반환 |
String s="hello"; int idx=s.indexOf('e', 0); |
idx=1 |
int indexOf(String str) | 문자열이 존재하는지 확인하여 그 위치를 알려줌 없으면 -1 반환 |
String s="ABCDE"; int idx=s.indexOf("CD"); |
idx=2 |
int lastIndexOf(int ch) | 문자 또는 문자코드를 문자열의 오른쪽 끝에서부터 찾아서 위치를 알려줌. 못 찾으면 -1 반환 |
String s="java.lang.Object"; int idx1=s.latIndexOf('.'); |
idx1=9 |
int lastIndexOf(String str) | 문자열을 인스턴스의 문자열 끝에서 부터 찾아서 위치를 알려줌. 못 찾으면 -1 반환 |
String s="java.lang.java"; int idx1=s.lastIndexOf("java"); |
idx1=10 |
String toString() | String인스턴스에 저장되어 있는 문자열을 반환 | String s="Hello"; String s1=s.toString(); |
s1="Hello" |
비교 메서드 | 설명 | 예제 | 결과 |
boolean equals(Object obj) | obj과 String인스턴스의 문자열 비교 obj가 String이 아니거나 문자열이 다르면 false 반환 |
String s="hello"; boolean b=s.equals("hello"); |
b=true |
boolean equalsIgnoreCase(String str) | 문자열과 String인스턴스의 문자열을 대소문자 구분없이 비교 | String s="hello"; boolean b=s.equalsIgnoreCase("Hello"); |
b=true |
int compareTo(String str) | str과 사전순서로 비교 같으면 0, 사전순으로 이전이면 음수, 이후면 양수 반환 |
int i="aaa".compareTo("aaa"); | i=0 |
추가 메서드 | 설명 | 예제 | 결과 |
String concat(String str) | str을 뒤에 덧붙인다. | String s="hello"; String s2=s.concat(" world"); |
s2="hello world" |
변환 메서드 | 설명 | 예제 | 결과 |
String replace(char old, char nw) | 문자(old)를 새로운 문자(nw)로 바꾼 문자열 반환 | String s="hello"; String s1=s.replace('h', 'c'); |
s1="cello" |
String replace(CharSequence old, CharSequence nw) | 문자열(old)을 새로운 문자열(nw)로 모두 바꾼 문자열 반환 | String s="Hellollo"; String s1=s1.replace("ll", "LL"); |
s1="HeLLoLLo" |
String replaceAll(String regex, String replacement) | 지정된 문자열(regex)과 일치하는 것을 새로운 문자열(replacement)로 모두 변경 | String ab="AABBAABB"; String r=ab.replaceAll("BB", "bb"); |
r="AAbbAAbb" |
String replaceFirst(String regex, String replacement) | 지정된 문자열(regex)과 일치 하는 것 중, 첫 번째 것만 새로운 문자열(replacement)로 변경 | String ab="AABBAABB"; String r=ab.replaceFirst("BB", "bb"); |
r="AAbbAABB" |
String[] split(String regex) | 문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환 | String animals="dog, cat, bear"; String[] arr=animals.split(","); |
arr[0]="dog" arr[1]="cat" arr[2]="bear" |
String toLowerCase() | String인스턴스에 저장된 모든 문자열을 소문자로 변환하여 반환 | String s="Hello"; String s1=s.toLowerCase(); |
s1="hello" |
String toUpperCase() | String인스턴스에 저장된 모든 문자열을 대문자로 변환하여 반환 | String s="Hello"; String s1=s.toUpperCase(); |
s1="HELLO" |
char[] toCharArray() | 문자열을 문자배열(char[])로 변환 후 반환 | String s="hello"; char[] tmp=s.toCharArray(); |
tmp={'h', 'e', 'l', 'l', 'o'} |
🍟 문자열에서 문자의 빈도수 세기
long cnt=문자열.chars()
.filter(c -> c == 문자)
.count();
IntStream chars()는 이 sequence에서 char 값의 IntStream을 반환
Stream<T> filter(Predicate<? super T> predicate)는 새로운 stream을 반환
filter 메소드는 중간 연산자다.
long count()는 stream에서 요소의 갯수를 세서 반환
참고 👉자바의 정석 3판
https://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html#chars--
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#count--
반응형
'JAVA' 카테고리의 다른 글
Comparator와 Comparable (0) | 2021.07.08 |
---|---|
Stack (0) | 2021.07.08 |
wrapper 클래스 (0) | 2021.07.05 |
버퍼 입출력 (0) | 2021.07.05 |
HashMap (0) | 2021.07.02 |