String_단어 뒤집기_stringBuffer, ArrayList, toCharArray, String.valueOf
✅ 문자를 그냥 뒤집기만 하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.example.ct_inflean_2024.String;
import java.util.Scanner;
class Main {
public String solution(String str){
String answer= "";
String[] strArr= str.split("");
for(int i= strArr.length -1; 0<= i; i--){
answer += strArr[i];
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(T.solution(str));
}
}
//⭐️input:
// Time
//⭐️output:
// emiT
🔴 TroubleShooting
처음에 for문을 돌릴 때 int i= strArr.length;
라고 해서
non-zero exit value 1
가 떴다. 이 문제가 발생한 이유는
예를 들어 길이기 5인 배열이면 index가 0~4ㅅ까지인데 인덱스가 5인 값을 찾으려고 했기 때문이다.
int i= strArr.length -1;
이라고 수정해주니 문제가 해결되었다.
✅ N개의 단어가 주어지면 각 단어를 뒤집어 출력
첫 줄에 자연수 N(3<=N<=20)이 주어집니다.
두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다. 단어는 영어 알파벳으로만 구성되어 있습니다.
🟢 여러줄 입력받고 출력_StringBuffer.reverse 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Main {
public ArrayList<String> solution(int n, String[] str){
ArrayList<String> answer= new ArrayList<>();
for(String x: str){
StringBuffer sb= new StringBuffer(x);
String a= sb.reverse().toString();
answer.add(a);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc= new Scanner(System.in);
int n= sc.nextInt();
String[] str= new String[n];
for(int i=0; i<n; i++){
str[i]= sc.next();
}
for(String x: T.solution(n, str)){
System.out.println(x);
}
}
}
//⭐️input:
// 3
// good
// Time
// Big
//⭐️output:
// doog
// emiT
// giB
✅ 특정 문자끼리 바꿔서 출력하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Main {
public ArrayList<String> solution(int n, String[] str){
ArrayList<String> answer= new ArrayList<>();
for(int i=0; i< str.length; i++){
char[] charArr= str[i].toCharArray();
int lt=0;
int rt= charArr.length-1;
while( lt < rt ){
char tmp= charArr[lt];
charArr[lt] = charArr[rt];
charArr[rt] = tmp;
lt++;
rt--;
}
// String charToStr= new String(charArr);
// str[i] = charToStr;
// answer.add(str[i]);
String tmp= String.valueOf(charArr);
answer.add(tmp);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc= new Scanner(System.in);
int n= sc.nextInt();
String[] str= new String[n];
for(int i=0; i<n; i++){
str[i]= sc.next();
}
for(String x: T.solution(n, str)){
System.out.println(x);
}
}
}
- 받은 str배열안에 들어있는 str을 반복문을 사용해 charArray로 바꿔준다.
.toCharArray();
- 그러면 이제는 배열이니까 각 char들을 바꿀 수 있다.
- 배열 순서 [0]은 lt, 가장 마지막은 rt로 하고 그 char끼리 바꾼다.
- lt++, rt– 해서 각각 하나씩 늘리고 줄여서 그 다음 char끼리 바꾼다.
- 이제 바꾼 charArr를 stringArray에 넣어주어야 하므로
String.valueOf(charArr);
를 사용하여 string을 만든다. - ArrayList에 string을
.add(tmp);
🔵 ThingsILearned
✔️ charArr to String then add to ArrayList
- charrArr을
valueOf
를 사용해 String으로 바꾼다. - ArrayList에 값을 추가하기 위해서는
.add()
를 쓴다.
✔️ 여러줄 scanner
- 먼저 몇 줄 입력받을지 그 숫자를
sc.nextInt()
를 사용해 입력받는다. - 다음 String 배열을 하나 만들고 그 배열의 크기는 방금 알아낸 숫자 크기만큼 한다.
- 이제 반복문을 돌면서 String의 첫 번째 인덱스부터
sc.next()
를 사용해 입력받은 string을 넣는다.
✔️ StringBuffer.reverse.toString
StringBuffer은 새로운 값이 추가되어도 새로운 객체를 생성하지 않고 이미 있는 객체에 더해진 값만 추가할 수 있다.
StringBuffer is thread safe compared to String Builder.
따라서 RAM을 많이 잡아먹지 않아 효율적이다.
StringBuffer의 다양한 메소드
append
, insert
(특정 위치에 삽입), delete
, reverse
, replace
, subString
(return new string), charAt
, length
This post is licensed under CC BY 4.0 by the author.