Java String - 메소드 살펴보기
String 클래스는 문자열을 편리하게 다루기 위한 메소드를 제공한다.
기능이 매우 많으므로 필요한 메소드만 사용하고 그 외의 필요하거나 API 문서로 원하는 메소드를 찾는 것이 좋다.
문자열 정보 조회
- length(): 문자열 반환
- isEmpty(): 문자열 비었는지 확인 (공백(Whitespace)만 있는 경우 false 반환)
- isBlank(): 문자열 비었는지 확인 (공백(Whitespace)만 있는 경우 true 반환)
- charAt(int index): 지정한 인덱스에 문자를 반환
문자열 비교
- equlas(Object anObject): 두 문자열이 동일한지 비교
- equalsIgnoreCase(String anotherString): 두 문자열 대소문자 구별없이 비교
- compareTo(String anotherString): 두 문자열 사전적 비교
- 숫자 비교인 경우 반환 값: 1(크다), 0(같다), -1(작다)
- 문자열인 경우 반환 값(ASCII 변환하면 이해할 수 있다.): "a".compareTo("c") 계산하면 2 반환함. ascii 변환 시 a(61), c(63) 숫자이며 61-63 계산한것과 같음.
- compareToIgnoreCase(String str): 두 문자열 대소문자 구별없이 사전적 비교
- startsWith(String prefix): 문자열 특정 접두사로 시작하는지 확인
- endsWith(String suffix): 문자열이 특정 접미사로 끝났는지 확인
문자열 검색
- contains(CharSequence s): 문자열이 특정 문자열을 포함하고 있는지 확인
- indexOf(String ch): 문자열 처음 등장하는 위치 인덱스 반환
- indexOf(String ch, int fromIndex): 문자열 처음 등장하는 위치 인덱스 반환
- lastIndexOf(String ch): 문자열 마지막 위치 인덱스 반환
문자열 조작 및 변환
- substring(int beginIndex): 전체 문자열 중 인수의 인덱스부터 문자열을 반환
- substring(int beginIndex, endIndex): 전체 문자열의 인덱스부터 문자열을 반환
- concat(String str): 문자열 끝에 다른 문자열 붙여서 반환
- replace(CharSequence target, CharSequence replacement): 특정 문자열을 새 문자열로 변환하여 반환
- replaceAll(String regex, String replacement): 문자열을 정규표현식과 일치하는 것을 새 문자열로 변환하여 반환
- toLowerCase(): 문자열을 소문자 변환하여 반환
- toUpperCase(): 문자열을 대문자로 변환하여 반환
- trim(): 문자열 양 끝의 공백(Whitespace) 제거하여 반환
- strip(): 유니코드 공백 Whitespace 포함해서 제거하여 반환
문자열 분할 및 조합
- split(String regex): 문자열을 정규 표현식으로 분할하여 반환
- join(CharSequence delimiter, CharSequence... elements): 구분자 기준으로 결합하기
기타 유틸리티
- valueOf(Object obj): 다양한 타입을 문자열로 반환
- toCharArray(): 문자열을 배열로 반환
- format(String format, Object... args): 문자열과 인자를 사용한 새로운 문자열을 생성
- matches(String regex): 문자열이 정규표현식과 일치하는지 확인
String 조회 메소드 - 실습
- length(): 문자열 반환
- isEmpty(): 문자열 비었는지 확인 (공백(Whitespace)만 있는 경우 false 반환)
- isBlank(): 문자열 비었는지 확인 (공백(Whitespace)만 있는 경우 true 반환)
- charAt(int index): 지정한 인덱스에 문자를 반환
int Length()
String str = "Java String";
System.out.println("문자열 길이: " + str.length());
bool isEmpty()
String str = "Java String";
System.out.println("문자열이 비어 있었는가: " + str.isEmpty());
bool isBlank()
String str = "Java String";
System.out.println("문자열이 비어 있거나 공백인가: " + str.isBlank());
false
isBlank 메소드는 "Java String" 문자가 있으므로 fasle 값으로 반환한다.
String str = "Java String";
System.out.println("문자열이 비어 있거나 공백인가: " + " ".isBlank());
true
" " 공백만 있는 문자열인 경우 Blank 가 맞으므로 true 값으로 반환한다.
char charAt(int index)
String str = "Java String";
System.out.println("문자열이 비어 있거나 공백인가: " + str.charAt(5));
S
문자열 "Java String" 5번 이동하여 값("S") 반환한다.
String 비교 메소드 - 실습
- equlas(Object anObject): 두 문자열이 동일한지 비교
- equalsIgnoreCase(String anotherString): 두 문자열 대소문자 구별없이 비교
- compareTo(String anotherString): 두 문자열 사전 순으로 비교
- compareToIgnoreCase(String str): 두 문자열 대소문자 구별없이 사전 순으로 비교
- startsWith(String prefix): 문자열 특정 접두사로 시작하는지 확인
- endsWith(String suffix): 문자열이 특정 접미사로 끝났는지 확인
bool equlas(Object anObject)
String str1 = "Java, Apple";
String str2 = "java, apple";
System.out.println(str1.equals(str2));
false
bool equlasIgnoreCase(String anotherString)
String str1 = "Java, Apple";
String str2 = "java, apple";
System.out.println(str1.equalsIgnoreCase(str2));
true
int compareTo(String anotherString)
System.out.println("a".compareTo("b"));
-1
System.out.println("b".compareTo("a"));
1
System.out.println("a".compareTo("b"));
2
System.out.println(str1.compareTo(str2));
32
System.out.println(str1.compareToIgnoreCase(str2));
0
bool startsWith(String prefix)
String str1 = "Java, Apple";
System.out.println(str1.startsWith("Java"));
true
String str1 = "Java, Apple";
System.out.println(str1.startsWith("va", 2));
true
endsWith(String suffix)
String str1 = "Java, Apple";
System.out.println(str1.endsWith("Apple"));
true
String 검색 - 실습
- contains(CharSequence s): 문자열이 특정 문자열을 포함하고 있는지 확인
- indexOf(String ch): 문자열 처음 등장하는 위치 인덱스 반환
- indexOf(String ch, int fromIndex): 문자열 처음 등장하는 위치 인덱스 반환
- lastIndexOf(String ch): 문자열 마지막 위치 인덱스 반환
boolean contains(CharSequence s)
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.contains("Java"));
true
int indexOf(String ch)
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.indexOf("Hello"));
4
int indexOf(String ch, int fromIndex)
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.indexOf("Hello"), 11);
22
int lastIndexOf(String ch)
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.lastIndexOf("Hello"));
22
String 조작 및 변환 - 실습
- substring(int beginIndex): 전체 문자열 중 인수의 인덱스부터 문자열을 반환
- substring(int beginIndex, endIndex): 전체 문자열의 인덱스부터 문자열을 반환
- concat(String str): 문자열 끝에 다른 문자열 붙여서 반환
- replace(CharSequence target, CharSequence replacement): 특정 문자열을 새 문자열로 변환하여 반환
- replaceAll(String regex, String replacement): 문자열을 정규표현식과 일치하는 것을 새 문자열로 변환하여 반환
- toLowerCase(): 문자열을 소문자 변환하여 반환
- toUpperCase(): 문자열을 대문자로 변환하여 반환
- trim(): 문자열 양 끝의 공백(Whitespace) 제거하여 반환
- strip(): Whitespace 포함한 유니코드 공백 제거하여 반환
- strip.Leading(): 첫 문자열부터 Whitespace 포함한 유니코드 공백 제거하여 반환
- stripTrailing(): 마지막 문자열부터 Whitespace 포함한 유니코드 공백 제거하여 반환
String substring(int beginIndex)
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.substring(11));
Welcome To Hello Java World !!!
String substring(int beginIndex, endIndex)
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.substring(11, 21));
Welcome To
String concat(String str)
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.concat("@@@"));
!!! Hello, Welcome To Hello Java World !!!@@@
String replace(CharSequence target, CharSequence replacement)
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.replace("Hello", "Good"));
!!! Good, Welcome To Good Java World !!!
String replaceFirst(CharSequence target, CharSequence replacement)
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.replaceFirst("Hello", "Good"));
!!! Good, Welcome To Hello Java World !!!
String toLowerCase()
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("Learning Java String".toLowerCase());
learning java string
String toUpperCase()
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("Learning Java String".toUpperCase());
LEARNING JAVA STRING
String trim()
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("'" + " 공백 좌우 있음 ".trim() + "'");
'공백 좌우 있음'
String strip()
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("'" + " 공백 좌우 있음 ".strip() + "'");
'공백 좌우 있음'
String stripLeading()
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("'" + " 공백 좌우 있음 ".strip() + "'");
'공백 좌우 있음 '
String stripTrailing()
String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("'" + " 공백 좌우 있음 ".strip() + "'");
' 공백 좌우 있음'
String 분할 및 조합 - 실습
- split(String regex): 문자열을 정규 표현식으로 분할하여 반환
- join(CharSequence delimiter, CharSequence... elements): 구분자 기준으로 결합하기
String[] split(String regex)
String str = "Apple|Banana|Orange";
String[] sp = str.split("\\|");
for (String s : sp) {
System.out.println(s);
}
Apple
Banana
Orange
String join(CharSequence delimiter, CharSequence... elements)
join 메소드 사용 전 이전에는 어떻게 사용했는지 살펴본다.
참고로 split 예제에 사용한 sp 변수가 필요하다.
String str = "Apple|Banana|Orange";
String joinStr = "";
for (int i = 0; i < sp.length; i++) {
String string = sp[i];
joinStr += string;
if (i != sp.length) {
joinStr += ",";
}
}
System.out.println("str = " + joinStr);
str= Apple,Banana,Orange
앞서 사용한 코드에서 문자열 끝의 "," 없애는 과정도 필요하며 코드 또한 길어진다.
join 메소드를 사용하여 리팩토링하도록 한다.
String result = String.join(",", sp);
System.out.println("join = " + result);
join = Apple,Banana,Orange
String 기타 - 실습
- valueOf(Object obj): 다양한 타입을 문자열로 반환
- toCharArray(): 문자열을 배열로 반환
- format(String format, Object... args): 문자열과 인자를 사용한 새로운 문자열을 생성
- matches(String regex): 문자열이 정규표현식과 일치하는지 확인
String valueOf(Object obj)
인자 값으로 Object obj 뿐 아니라 String, Integer, Boolean 등등 여러 가지 인자 값으로 넘길 수 있다.
int n = 200;
boolean b = true;
Object obj = new Object();
String str = "Hello, Java";
// value Of 메소드 사용
String numToString = String.valueOf(n);
System.out.println("숫자의 문자열: " + numToString);
String boolToString = String.valueOf(b);
System.out.println("불리언의 문자열: " + boolToString);
String objToString = String.valueOf(obj);
System.out.println("오브젝트의 문자열 " + objToString);
숫자의 문자열: 200
불리언의 문자열: true
오브젝트의 문자열 java.lang.Object@f6f4d33
valueOf 메소드 특징으로 valueOf 메소드를 사용하지 않아도 더하기(+) 연산자 변수 할당에 문자열(String 타입)이 있다면 알아서 valueOf 동작한다.
int n = 200;
boolean b = true;
Object obj = new Object();
String str = "Hello, Java";
// value Of 메소드 사용
String plusOperation1 = str + b;
System.out.println("Opration \"Hello\" + true: '" + plusOperation1 + "'");
String plusOperation2 = str + obj;
System.out.println("Opration \"Hello\" + obj: '" + plusOperation2 + "'");
String plusOperation3 = n + str;
System.out.println("Opration 200 + \"Hello\": '" + plusOperation3 + "'");
Opration "Hello" + true: 'Hello, Javatrue'
Opration "Hello" + obj: 'Hello, Javajava.lang.Object@3f99bd52'
Opration 200 + "Hello": '200Hello, Java'
char[] toCharArray()
문자열을 배열로 반환한다. 바이트스트림이나 직렬화에 사용하기도 한다.
String str = "Hello, Java";
char[] chars = str.toCharArray();
System.out.println("문자열을 배열 반환: " + chars);
System.out.println(chars);
for (char a : chars) {
System.out.print(a);
}
문자열을 배열 반환: [C@f6f4d33
Hello, Java
Hello, Java
배열의 참조값을 출력하는 것을 볼 수 있는데,
이것은 println (+) 연산자로 인해 배열 참조값 문자열로 출력한 것이다.
String format(String format, Object... args)
C언어의 printf 함수로 출력하는 것과 유사하다.
format 대신 System.out.printf
대신 사용하여도 동작한다.
(System.out.println 함수로는 안됨!)
int n = 200;
boolean b = true;
Object obj = new Object();
String str = "Hello, Java";
String format1 = String.format("Num: %d, Bool: %b, Obj: %s", n, str, b);
System.out.println(format1);
String format2 = String.format("숫자: %.3f", 10.22222);
System.out.println(format2);
System.out.printf("숫자: %.3f", 10.22222);
Num: 200, Bool: true, Obj: true
숫자: 10.222
숫자: 10.222
Boolean matches(String regex)
정규표현식으로 해당 패턴이 동일한지 확인하는 메소드
String str = "Hello, Java";
String regex = "Hello, (Java|World)";
System.out.println(str.matches(regex));
true