Java

Java String 정렬에 관하여

wizi 2022. 3. 9. 02:10

Java로 코딩테스트를 연습하다가 난관에 부딪혔다.

자바에서 String을 정렬을 어떻게 할 것인가였다.

 

C++에서는 아래 코드처럼 사용했기 때문에 큰 문제는 없었다.

#include <iostream>
using namespace std;

int main(){
    string str = "54321";
    sort(str.begin(), str.end());
    cout << str << endl;
}

// 출력 : 12345

 

하지만 Java에서는 String을 char형 배열로 바꾸고 이를 정렬한 후 다시 String타입으로 바꿔주었다.

// 문자열 정렬
import java.util.*;

class Main{
    public static void main(String[] args){
        String str = "54321";
        char charStyleStr[] = str.toCharArray();
        Arrays.sort(charStyleStr);
        String sortedStr = new String(charStyleStr);
        System.out.println(sortedStr);
    }
}

// 출력 : 12345

 

심지어 문자열을 뒤집기 위해서는 StringBuffer를 사용한다.

// 문자열 뒤집기
import java.util.*;

class Main{
    public static void main(String[] args){
        String str = "54321";
        StringBuffer sb = new StringBuffer(str);
        String reversedStr = sb.reverse().toString();
        System.out.println(sb);
    }
}

// 출력 : 12345

 

진짜 불편하다.

Java의 String class에 정렬하거나 뒤집는 메서드 정도는 있지 않을까 싶었지만 찾아보니 없다.

Java에서 String은 불변이기 때문에 이런 메서드를 구현하지 않았나 생각이 든다. (이거말고 다른 이유도 있을 듯?)

하지만 새로운 String을 만들어내는 함수 하나정도는 만들어놓아도 좋지 않았나 생각이 든다.

 

 

생각해보니 Javascript에서도 문자열 정렬이 없다.

Javascript에서 문자열을 정렬하는 코드는 다음과 같다.

const str = "54321";

const sortedStr = str.split('').sort((a,b) => a-b).join('');

console.log(sortedStr);

생각해보니 javascript에서 string은 불변객체이다.

 

불변객체이기 때문에 메서드가 구현이 안되어있다라고 의심이 간다.

 

※여기서부터는 의심에 대한 나의 생각※

string을 정렬하는 메서드가 구현되어있다고 생각을 해보자.

해당 string객체를 통해 메서드를 불러오면 해당 string객체는 정렬된 상태로 변해야한다.

그런데 string이 불변이라면 중간에 값이 바뀔 수 없다.

더 자세한거는 String Class 내부를 살펴봐야 정확하게 알 수 있을 것 같다.

 

'Java' 카테고리의 다른 글

Java 접근 제어자  (0) 2022.03.16
(JAVA) String, String builder, String Buffer  (0) 2022.02.10
JAVA String에 관하여  (0) 2021.07.12
프로그래머들에게 권장하는 JAVA 네이밍 규칙  (0) 2021.07.12
JVM(Java Virtual Machine)  (0) 2021.07.12