String
Algorithm 관련 포스팅
- 최빈값 구하기
- k의 개수 구하기
- String
- 문자열 정렬하기
- 인덱스 바꾸기
- 제곱수 판별하기
- Math
- 배열 회전시키기
- A로 B 만들기
- 잘라서 배열로 저장하기
- Array와 ArrayList
- 저주의 숫자 3
이 글은 알고리즘 문제를 풀면서 String과 관련한 메서드를 정리한 것입니다.
역순 출력
for 문
구조for (변수 초기값; 변수 조건문; 변수의 증감식)
- 기존에 익숙했던 패턴인
for (int i = 0; i < 배열.length; i++)
을 수정 -
for (int i = my_string.length() - 1; i >= 0; i--)
→
i
초기 값은my_string.length() - 1
로 시작하며,i
가 0 보다 클 때,i
값은 1씩 감소함 charAt(index)
으로 문자열의 index에 해당하는 문자 반환-
예시
String my_string = "bread"; String result = ""; // for문 구조 수정 for (int i = my_string.length() - 1; i >= 0; i--) { result += my_string.charAt(i); } System.out.println(result);
- result
daerb
배수 번째의 문자 출력
for문
구조를 이용해if문
의 조건을 대신함-
code 번째를 나타내는 조건문
if (i % code == 0)
를for문으로
for (int i = code; i <= cipher.length(); i += code)
바꾸어 나타내면 간략해짐→
i
초기 값은 code로 시작하며, 문자열의 길이만큼 반복문을 돌며,i
값은 code만큼 더해짐 - 예시: 문자열(
cipher
)의 배수(code
) 번째 문자만 골라서 출력하는 코드- for문 구조 변경 전 코드
String cipher = "dfjardstddetckdaccccdegk"; int code = 4; String result = ""; for (int i = 1; i < cipher.length() + 1; i++) { // for문 구조 변경 전 if (i % code == 0) { // if문 필요 result += cipher.charAt(i - 1); } } System.out.println("result = " + result);
- result
result = attack
- for문 구조 변경 후 코드
String cipher = "dfjardstddetckdaccccdegk"; int code = 4; String result = ""; for (int i = code; i <= cipher.length(); i += code) { // for문 구조 변경 후 result += cipher.charAt(i - 1); // if문 불필요 } System.out.println("result = " + result);
- result
result = attack
변수 타입 확인
객체
의 경우,getClass().getSimpleName()
으로 타입을 확인primitive type
의 경우,Object
로 형변환을 한 뒤getClass().getSimpleName()
으로 타입을 확인-
예시
int num = 29183; String str = "cake"; int[] numArr = {8, 7, 6, 5}; String[] numStrArr = {"Apple", "Banana", "Car"}; System.out.println(((Object)num).getClass().getSimpleName()); // Integer System.out.println(str.getClass().getSimpleName()); // String System.out.println(numArr.getClass().getSimpleName()); // int[] System.out.println(numStrArr.getClass().getSimpleName()); // String[]
- result
Integer String int[] String[]
char[]을 String으로 변환
-
String 생성자
이용:
char[]
를 인자로 받아 내부적으로String.valueOf()
를 호출함-
예시
char[] ch = {'m', 'i', 'n', 'g'}; String str = new String(ch); System.out.println(str);
- result
ming
-
String.valueOf()
- 예시
char[] ch = {'c', 'h', 'e', 'r', 'r', 'y'}; String str = String.valueOf(ch); System.out.println(str);
- result
cherry
StringBuilder
인스턴스 생성 후append()
메서드 사용- 예시
char[] ch = {'b', 'l', 'o', 's', 's', 'o', 'm'}; StringBuilder sb = new StringBuilder(); for (int i = 0; i < ch.length; i++) { sb.append(ch[i]); } System.out.println(sb);
- result
blossom
String[]을 String으로 변환
String.join(구분자, 배열)
-
예시
String[] str_arr = {"apple", "banana", "cherry"}; String str_result = String.join("-", str_arr); System.out.println(str_result); // apple-banana-cherry
- result
apple-banana-cherry
기본형을 String으로 변환
String.valueOf()
을 이용해boolean
,char
,int
,long
,float
,double
을String
으로 변환getClass().getSimpleName()
으로 타입 확인-
예시
boolean bool = true; char ch = 'c'; int in = 101; long l = 100L; float f = 3.14f; double d = 1.23; String bool_str = String.valueOf(bool); // String String ch_str = String.valueOf(ch); // String String in_str = String.valueOf(in); // String String l_str = String.valueOf(l); // String String f_str = String.valueOf(f); // String String d_str = String.valueOf(d); // String System.out.println(bool_str.getClass().getSimpleName()); // String
- result
String
String을 char[]로 변환
문자열.toCharArray()
-
예시
String str = "Spring"; char[] chArr = str.toCharArray(); // String -> char[] System.out.println(Arrays.toString(chArr));
- result
[S, p, r, i, n, g]
대/소문자 변환
toUpperCase()
,toLowerCase()
-
예시
String my_string = "abCdEfghIJ"; System.out.println(my_string.toUpperCase()); // ABCDEFGHIJ System.out.println(my_string.toLowerCase()); // abcdefghij
- result
ABCDEFGHIJ abcdefghij
문자 위치 찾기
-
문자열.indexOf()
: 문자열에서 해당 문자의 첫 등장 위치 반환int indexOf(String str) // str: 찾을 문자열 int indexOf(String str, int fromIndex) // str: 찾을 문자열, fromIndex: 시작 인덱스
-
예시: 처음 등장하는 문자만 반환하기
String my_string = "We are the world"; String answer = ""; for (int i = 0; i < my_string.length(); i++) { if (my_string.indexOf(my_string.charAt(i)) == i) answer += my_string.charAt(i); } System.out.println(answer);
- result
We arthwold
문자 포함 여부
-
주어진 문자열.contains(찾는 문자열)
: 주어진 문자열에서 특정 문자열의 포함 여부(true
/false
)를 반환boolean contains(CharSequence s) // s: 찾을 문자열
-
예시
String str1 = "ab6CDE443fgh22iJKlmn1o"; String str2 = "6CD"; System.out.println(str1.contains(str2)); // true String str3 = "ppprrrogrammers"; String str2 = "pppp"; System.out.println(str3.contains(str4)); // false
- result
true false
문자 치환
-
문자열.replaceAll(타겟의 정규식, 교체될 문자열)
: 반환String replaceAll(String regex, String replacement)
-
예시-1) 문자열
"one", "six", "seven"
을"1", "6", "7"
로 교체하기String numbers = "onefourzerosixseven"; answer = numbers.replaceAll("one", "1") .replaceAll("six", "6") .replace("seven", "7"); System.out.println(answer);
- result
1fourzero67
-
예시-2) 주어진 문자열에서 모음
'a', 'i', 'u', 'e', 'o'
제거하기String my_string = "nice to meet you"; String answer = ""; answer = my_string.replaceAll("[aiueo]", ""); System.out.println(answer);
- result
nc t mt y