🏃♂️ 들어가기 앞서..
본 게시물은 스터디 활동 중에 작성한 게시물로 자바의 정석-기초편 교재를 학습하여 정리하는 글입니다.
※ 스터디 Page : 〔투 비 마스터 : 자바〕
*해당 교재의 목차 순서와 구성을 참고하여 작성하며
각 내용마다 부족할 수 있는 내용이나 개인적으로 궁금한 점은
추가적인 검색을 통해 채워나갈 예정입니다.
메서드 / 설명 | 예시 | 결과 |
---|---|---|
String(String s) (효율적이지 않아 잘 사용하지 않음) 문자열(s)를 갖는 String 인스턴스 생성 | String s = new String("Hello") ; | s = "Hello" |
String(char[] value) 주어진 문자열(value)을 갖는 String 인스턴스 생성 | char[] c = {'H', 'e', 'l', 'l', 'o'}; String s = new String(c); | s = "Hello" |
String toCharArray() 지정된 String을 char 배열로 변환 | String s = "Hello" char[] c = s.toCharArray(); | c = {'H', 'e', 'l', 'l', 'o'} |
String(StringBuffer buf) StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의 String인스턴스 생성 | StringBuffer sb = new StringBuffer("Hello"); String s = new String(sb); | s = "Hello" |
메서드 / 설명 | 예시 | 결과 |
---|---|---|
int compareTo(String str) 문자열(str)과 "사전순서"로 비교 같으면 0, 이전이면 음수, 이후면 양수 | int i = "aaa".compareTo("aaa") ; int i2 = "aaa".compareTo("bbb") ; int i3 = "bbb".compareTo("aaa") ; | i = 0 i2 = -1 i3 = 1 |
boolean contains(CharSequence s) 지정된 문자열의 포함 여부 | String s = "abcedfg" ; boolean b = s.contains("bc") ; | b = true |
boolean endsWith(String suffix) 지정된 문자열로(suffix)로 끝나는지 검사 | String file = "Hello.txt" ; boolean b = file.endsWith(".txt") ; | b = true |
boolean startsWith(String prefix) 지정된 문자열로(prefix)로 시작하는지 검사 | String s = "java.lang.Object"; boolean b1 = s.startsWith("java"); boolean b2 = s.startsWith("lang"); | b1 = true b2 = false |
boolean equals(Object obj) 매개변수로 입력받은 문자열(obj)와 String 인스턴스 문자열 비교 | String s = "Hello"; boolean b = s.equals("Hello"); boolean b2 = s.equals("hello"); | b = true b2 = false |
boolean equalsIgnoreCase(String str) 비교 대상은 equals와 같지만 대소문자 구분없이 비교 | String s = "Hello"; boolean b = s.equalsIgnoreCase("HELLO"); boolean b2 = s.equalsIgnoreCase("heLLo"); | b = true b2 = true |
메서드 / 설명 | 예시 | 결과 |
---|---|---|
char charAt(int index) 지정된 위치(index)에 있는 문자를 반환 : 0부터 시작 | String s= "Hello" ; String n = "0123456"; char c = s.charAt(1) ; char c2 = n.charAt(1) ; | c = 'e' c2 = '1' |
int indexOf(int ch) 주어진 문자(ch)가 문자열에 존재하는지 확인하고 그 위치를 반환 ( 없으면 -1 반환 ) | String s = "Hello" ; int idx1 = s.index('o') ; int idx2 = s.index('k') ; | idx1 = 4 idx2 = -1 |
int indexOf(int ch, int pos) 방법은 위와 동일하지만 어디서부터 찾기 시작할지 지정(pos) | String s = "Hello" ; int idx1 = s.index('e', 1) ; int idx2 = s.index('e', 2) ; | idx1 = 0 idx2 = -1 |
int indexOf(String str) 주어진 문자열에 대해 탐색 | String s = "ABCDEFG" ; int idx = s.indexOf("CD") ; | idx = 2 |
int lastIndexOf(int ch) 위 indexOf 메서드에서 탐색이 끝에서부터 시작 | String s = "java.lang.Object" ; int idx1 = s.indexOf('.') ; int idx2 = s.lastIndexOf('.') ; | idx1 = 4 idx2 = 9 |
int lastIndexOf(String str) | String s = "java.lang.java" ; int idx1 = s.indexOf("java") ; int idx2 = s.lastIndexOf("java") ; | idx1 = 0 idx2 = 10 |
String intern() 문자열을 상수 저장소 (constant pool)에 저장 실행 시 문자열이 이미 있으면 주소값을 반환 | String s1 = new String("abc") ; String s2 = new String("abc") ; boolean b1 = (s1 == s2) ; boolean b2 = s1.equals(s2) ; boolean b3 = (s1.intern() == s2.intern()) ; | b1 = false b2 = true b3 = true |
int length() 길이 | String s = "Hello" ; int length = s.length() ; | length = 5 |
문자열 매개변수인 ch
가 int형으로 되어있는 이유는
문자열로 확장문자가 올 경우를 대비해서이다.
( 확장문자 : char 2개 )
※
regex
: 정규 표현식
메서드 / 설명 | 예시 | 결과 |
---|---|---|
String concat(String str) 문자열(str)을 뒤에 덧붙인다. | String s = "Hello"; String s2 = s.concat(" World") ; | s2 = "Hello World" |
String replace(char old, char nw) 문자열 중 원래 있던 문자(old)를 새로운 문자(new)로 교체 및 반환 | String s = "Hello" ; String s1 = s.replace('H','C') ; | s1 = "Cello" |
String replace(CharSequence old, CharSequence nw) 문자열 중 원래 있던 문자열(old)를 새로운 문자열(new)로 교체 및 반환 | String s = "HelloAllo" ; String s1 = s.replace('ll','LL') ; | s1 = "HeLLoALLo" |
String replaceAll(String regex, String replacement) 문자열 중 지정된 문자열(regex)과 일치하는 것을 교체 | String s = "AABABBCBB" ; String s1 = s.replace("BB","bb") ; | s1 = "AABAbbCbb" |
String replaceFirst(String regex, String replacement) 문자열 중 지정된 문자열(regex)과 " 첫번째 "로 일치하는 것을 교체 | String s = "AABABBCBB" ; String s1 = s.replace("BB","bb") ; | s1 = "AABAbbCBB" |
String[] split(String regex) 문자열을 지정한 regex를 기준으로 나눠서 배열에 담아 반환 | String animals = "dog,cat,bear" ; String[] arr = animals.split(",") ; | arr[0] = "dog" arr[1] = "cat" arr[2] = "bear" |
String[] split(String regex, int limit) 위 split과 동일하지만 문자열 전체를 지정된 수(limit)로 자름 | String animals = "dog,cat,bear" ; String[] arr = animals.split(",", 2) | arr[0] = "dog" arr[1] = "cat,bear" |
String substring(int begin) String substring(int begin, int end) 주어진 " 시작 위치(begin)부터 끝 위치(end) 범위 "에 포함된 문자열을 얻는다. 단, 끝위치의 문자는 포함되지 않음!! | String s = "java.lang.Object" ; String c = s.substring(10) String p = s.substring(5,9) | c = "Object" p = "lang" (끝 문자인 . 은 포함 안됨) |
String trim() 양 끝의 공백을 제거한 결과 반환 단, 중간 위치 공백은 제거되지 않음!! | String s = " Hello World " ; String s1 = s.trim(); | s1 = "Hello World" |
메서드 / 설명 | 예시 | 결과 |
---|---|---|
String toLowerCase() 모든 문자 소문자화 | String s = "Hello"; String s1 = s.toLowerCase(); | s1 = "hello" |
String toString() 인스턴스에 저장된 문자열을 반환 | String s = "Hello"; String s1 = s.toString(); | s1 = "Hello" |
String toUpperCase() 모든 문자 대문자화 | String s = "Hello"; String s1 = s.toUpperCase(); | s1 = "HELLO" |
static String valueOf(boolean b) static String valueOf(char c) static String valueOf(int i) static String valueOf(long l) static String valueOf(float f) static String valueOf(double d) static String valueOf(Object o) | String b = String.valueOf(true) ; String c = String.valueOf('a') ; String i = String.valueOf(100) ; String l = String.valueOf(100L) ; String f = String.valueOf(10f) ; String d = String.valueOf(10.0) ; java.util.Date dd = new java.util.Date() ; String date = String.valueOf(dd) ; | b = "true" c = "a" i = "100" l = "100" f = "10.0" d = "10.0" date = "Mon Feb 07 18:01:31 KST 2022" |
꼭 문자열 기준뿐만 아니라
" 모든 기본형들간의 변환 "에서도 아래 메서드들을 활용할 수 있다.
사실 기본형을 " 문자열 "로 변경하는 방법은 간단한데
바로
숫자에 빈 문자열 ""
을 더해주는 방법 이나
앞서 알아봤던
valueOf()
메서드를 사용하는 방법이다.
( valueOf()
메서드가 속도가 더 빠르다. )
이 경우 또한
valueOf()
를 사용하거나
parse{래퍼클래스_Integer = Int}()
를 사용하면 된다.
/* 문자열 "100" 을 기본형 int 100으로 */
int i = Integer.parseInt("100")
int i2 = Integer.valueOf("100") // 문자열을 기본형으로 바꿀 때도 해당 기본형에 대해 적용시키면 된다.
/*
valueOf() 메서드는
꼭 문자열을 기본형으로 바꿀 때만 사용할 수 있는 것은 아니다
*/
Float f = Float.valueOf(38) ; // 38.0
Integer i = Integer.valueOf(100, 16) ; // 256
// 기본형인 int i 랑 Integer i 둘다 작성해도 상관없음 - "오토박싱" (참조형 Integer를 자동으로 기본형 int 변환
Float f = Float.valueOf("38") ; // 38.0
여기서
Integer
에 대한 valueOf()
와 parseInt()
메서드의 두번째 매개변수로
"진법(radix)"입력이 된다.
* 생략시 기본값 10진법
( ex. "FF"와 16 입력 ▶ 255 출력 _ 단, FF와 같은 값을 넣고 진법을 생략하게 되면 NumberFormatException
발생 )
parse~
형식의 메서드는
" 문자열을 기본형으로 변환하는 메서드들의 기본적인 이름 형식 " 이라고 할 수 있다.
(메서드 앞의 클래스를들을 " 래퍼 클래스 "라고 한다.boolean B = Boolean.parseBoolean(String s) byte b = Byte.parseByte(String s) short s = Short.parseShort(String s) int i = Integer.parseInt(String s) long l = Long.parseLong(String s) float f = Float.parseFloat(String s) double d = Double.parseDouble(String s)
valueOf()
메서드가 훨씬 직관적이고 사용성이 좋긴 하지만그래도 <숫자형으로의 변환>에서는
parse~
메서드가 가장 많이 이용되고 있다// 참조변수 타입 "기본형"도 상관없음. (반환타입이 래퍼 클래스이지만 오토박싱으로 자동 변환) Boolean B = Boolean.valueOf(String s) Byte b = Byte.valueOf(String s) Short s = Short.valueOf(String s) Integer i = Integer.valueOf(String s) Long l = Long.valueOf(String s) Float f = Float.valueOf(String s) Double d = Double.valueOf(String s)
( 본래
.valueOf()
의 반환타입은 기본형이 아닌 래퍼 클래스이지만 " 오토박싱 (auto-boxing) "에 의해 자동변환 된다. _.parse{타입}
은 " 기본형 " 반환 )
join()
과 StringJoiner
" 문자열 결합 방법 "
join()
: 구분자 를 지정해서 문자열 사이에 넣어 결합 ( 매개변수 :구분자
/문자열 배열
)
▶ " StringBuffer "를 사용하기 때문에 빠르고 효율적임.
StringJoiner
클래스 : 매개변수로중간 구분자
/좌측 시작문자
/우측 끝문자
를 받아서 구분 후에 양 측 문자로 감싸주어 반환
join()
은 " 여러 문자열 사이에 구분자를 넣어서 결합 "하는 메서드인데
" 구분자로 문자열을 자르는 " split()
메서드와 반대라고 생각하면 된다.
/*
join() 사용법
*/
String animals = "dog,cat,bear" ;
Strng[] arr = animals.split(",") ; // 구분자로 문자열 "분할" ( {"dog", "cat", "bear"} )
String str = String.join("-", arr) ; // dog-cat-baer 로 반환
/*
StringJoiner 클래스 사용법
*/
StringJoiner sj = new StringJoiner(",", "[", "]") ; // 중간 구분자 ',' & 좌측 시작 '[' & 우측 끝 ']'
for(String s : arr) //for each 문
sj.add(s.UpperCase()) ;
System.out.println(sj.toString()); // [DOG,CAT,BEAR]