이전에 작성했던 문장 뒤집기를 응용하여 특정 문자 뒤집기에 대해 방법 2가지를 포스팅 하려고 한다.
🗝️)두 방법의 핵심은 특수 문자 판별이다.
이를 위해 Charter.isLetter() 메소드를 사용하여 현재 문자가 특수 문자인지를 판별하였다.
첫번째 방법
- 문자열에서 알파벳만 따로 저장해서 reverse를 하고
- 특수 문자 사이에다가 삽입하는 형태로 코드를 작성하였다.
String str = "a#b!GE*T@S";
StringBuilder s = new StringBuilder(); // reverse용
StringBuilder result = new StringBuilder(); // 결과
for(char ch : str.toCharArray())
{
//대소문자 or 대문자
if(Character.isLetter(ch)){
s.append(String.valueOf(ch));
}
}
s = s.reverse(); // 문자 뒤집기
int i = 0; // 인덱스
for(char ch : str.toCharArray())
{
if(Character.isLetter(ch)){
result.append(String.valueOf(s.charAt(i++)));
}
else{
result.append(String.valueOf(ch));
}
}
System.out.println(result.toString());
두번째 방법
- 시작 포인트(lt), 끝 포인트(rt)를 이용
String str = "a#b!GE*T@S";
int lt = 0;
int rt = str.length()-1;
char[] arr = str.toCharArray();
while(lt < rt)
{
char ltChar = arr[lt];
char rtChar = arr[rt];
if(!Character.isLetter(ltChar))
lt++;
else if(!Character.isLetter(rtChar))
rt--;
else // lt, rt 둘다 특수문자가 아닌경우 즉, 알파벳인 경우
{
char temp = arr[lt];
arr[lt] = arr[rt];
arr[rt] = temp;
lt++;
rt--;
}
}
String s = String.valueOf(arr);
System.out.println(s);
✏️마치며..
이전에는 첫번째 방법을 사용할 때 문자열 연산을 String으로 했을 텐데,
이번에는 StringBuilder를 통해 메모리를 절약하는 방법을 사용했다. 뭔가 불편하기는 한데.. 점점 습관을 들여야 겠다😪
'CodingTest' 카테고리의 다른 글
팰린드롬(회문) with JAVA (0) | 2022.03.30 |
---|---|
중복문자제거 with Java (0) | 2022.03.30 |
해시의 필요성 (0) | 2022.03.25 |
문장 뒤집기 with Java (0) | 2022.03.25 |
대소문자 변환 with Java (0) | 2022.03.24 |