Study/java

[Java] String - CASE_INSENSITIVE_ORDER, length(), isEmpty()

CASE_INSENSITIVE_ORDER

대소문자 상관없이 정렬하는 Comparator 변수입니다.

Comparator는 정렬 기준을 정해줄때 사용하는 객체인데 오름차순, 내림차순 뿐만 아니라 특수한 기준으로도 정렬하게 만들 수 있습니다.

 

문자열을 정렬할때도 문자를 정렬해주는 기준을 따로 만들수 있습니다.

CASE_INSENSITIVE_ORDER없이 정렬해야 한다면 다음과 같이 사용합니다.

import java.util.Arrays;
import java.util.Comparator;

public class JavaStudy {
	public static void main(String[] args) {
		String[] s = {"a", "Z", "r", "B"};

		Arrays.sort(s, new Comparator<String>() {
			//대소문자 상관없이 정렬해야해서 toLowerCase사용
			@Override
			public int compare(String o1, String o2) {
				return o1.toLowerCase().compareTo(o2.toLowerCase());
			}
		});
		System.out.println(Arrays.toString(s));
	}
}

정렬결과
정렬결과

 

sort메소드에 추가로 Comparator를 정의하여 매개변수로 넣어주면 해당 Comparator에 맞게 정렬합니다.

CASE_INSENSITIVE_ORDER는 이러한 로직을 한 줄만으로 처리할 수 있게 합니다.

 

 

 

 

String[] s = {"a", "Z", "r", "B"};
Arrays.sort(s, String.CASE_INSENSITIVE_ORDER);
System.out.println(Arrays.toString(s));

List<String> strList = new ArrayList<>();
strList.add("a");
strList.add("Z");
strList.add("r");
strList.add("B");
Collections.sort(strList, String.CASE_INSENSITIVE_ORDER);
System.out.println(strList.toString());

CASE_INSENSITIVE_ORDER 결과
CASE_INSENSITIVE_ORDER 결과

문자열을 대소문자 상관없이 정렬하고자 할때 따로 new Comparator를 정의하기보다는 CASE_INSENSITIVE_ORDER를 사용하면 코드 길이를 줄일 수 있습니다.

위에 예시처럼 배열, 리스트 상관없이 sort에 Comparator가 필요하다면 사용가능합니다.

 

당연한 이야기지만 string으로 이루어진 배열이나 리스트에만 사용할 수 있습니다.

CASE_INSENSITIVE_ORDER는 Comparator<String> 변수이기 때문입니다.

 

length()

공백을 포함한 문자열의 길이를 리턴해주는 메소드입니다.

사용방법은 간단합니다.

String str = "   What is the length of this String?";
System.out.println("This String's length is " + str.length());

length 결과
length 결과

문자열 길이가 필요한 로직 뿐만 아니라 charAt과 함께 반복문에 사용하기도 합니다.

 

isEmpty()

String개체가 비어있는지 판별합니다.

String s1 = new String();
System.out.println("Is s1 Empty? : " + s1.isEmpty());

String s2 = "";
System.out.println("Is s2 Empty? : " + s2.isEmpty());

큰따옴표로 선언한 문자열이나 new로 선언한 문자열 모두 빈 문자열임을 알 수 있습니다.

 

isEmpty메소드의 내부 로직은 메모리상 해당 개체가 비어있는지 판별하는 복잡한 로직은 아니었습니다.

단지 저 문자열의 길이가 0인지 아닌지 반환할 뿐입니다.