본문 바로가기

코테 공부/java

문자열 비교 (동일 여부 equals(), compareTo(), startsWith(), endsWith()) + 정렬 링크

.equals()

//str1.equals(str2)

System.out.println("str1.equals(str2) : " + str1.equals(str2));

리턴 값 true/false

 

대소문자를 구분하지 않고 알파벳이 같은지만 보려면 equalsIgnoreCase() 

 

str1이 null이라면 NullPointerException이 발생, 인자로 전달되는 객체는 null이라도 NullPointerException가 발생하지 않는다.

 

이런 NullPointerException이 발생하는 것을 신경쓰고 싶지 않다면

//Objects.equals(str1, str2)

System.out.println("str1 == str2 ? " + Objects.equals(str1, str2));

 

주의

==는 객체가 같은지를 비교하지만 객체가 갖고 있는 문자열을 비교하지는 않는다.

String str1 = "apple";
String str2 = "apple";
String str3 = new String("apple");

System.out.println("str1 == str2 ? " + (str1 == str2));
System.out.println("str1 == str3 ? " + (str1 == str3));

str1 == str2 ? true  //둘의 hashcode 같음
str1 == str3 ? false //다름

 

 

compareTo()

를 이용하면 리스트를 오름차순으로 정렬하거나 내림차순으로 정렬할 수 있다.

//str1.compareTo(str2)

String str1 = "apple";
String str2 = "apple";
String str3 = "banana";

System.out.println("str1.compareTo(str2) ? " + str1.compareTo(str2));
System.out.println("str1.compareTo(str3) ? " + str1.compareTo(str3));

//str1.compareTo(str2) ? 0
//str1.compareTo(str3) ? -ㅁㅁ(음수)

리턴 값

  • 0 : 두개의 문자열이 동일하
  • 양수 : compareTo()를 호출하는 객체가 인자보다 사전적으로 순서가 앞선다
  • 음수 : 인자가 객체보다 사전적으로 순서가 앞선다

대소문자를 구분하지 않고 비교하려면 compareToIgnoreCase()

 

startsWith()

는 어떤 String이 특정 문자열로 시작하는지를 boolean 타입으로 리턴해줍니다.

String example = "Apple Banana";

System.out.println(example.startsWith("A")); //true
System.out.println(example.startsWith("App")); //true
System.out.println(example.startsWith("Apple B")); //true
System.out.println(example.startsWith("ppl")); //false

 

반대로 

endsWith()

는 특정 문자열로 끝나는지 boolean 타입으로 리턴해줍니다.

String example = "Apple Banana";

System.out.println(example.endsWith("a")); //true
System.out.println(example.endsWith("ana")); //true
System.out.println(example.endsWith("e Banana")); //true
System.out.println(example.endsWith("Apple")); //false

 

 

정렬

Arrays.sort()

배열에 저장된 객체의 타입(Integer, String 등)과 관련 없이, Comparable이 구현된 객체라면 모두 정렬 가능

//arr 배열명
Arrays.sort(arr); //오름차순
Arrays.sort(arr, Collections.reverseOrder()); //내림차순

- 배열 부분 정렬

Arrays.sort(배열명, 시작 인덱스(포함), 끝 인덱스(포함));

sort()의 인자로 0과 4를 인자로 전달했는데, index 0에서 index 4를 포함하는 배열만 정렬하라는 의미.

int[] arr = {1, 26, 17, 25, 99, 44, 303};

Arrays.sort(arr, 0, 4);

System.out.println("Sorted arr[] : " + Arrays.toString(arr));

//문자열 배열이어도 마찬가지
Sorted arr[] : [1, 17, 25, 26, 99, 44, 303]

 

- Comparator 직접 구현

ex) 내림차순

Integer[] arr = {1, 26, 17, 25, 99, 44, 303};

Arrays.sort(arr, new Comparator<Integer>() {
    @Override
    public int compare(Integer i1, Integer i2) {
        return i2 - i1;
    }
});

System.out.println("Sorted arr[] : " + Arrays.toString(arr));

Lambda를 사용하여 구현

//Comparator로 비교할 때는 int를 사용하지 않고 Integer를 사용해야 합니다.

Integer[] arr = {1, 26, 17, 25, 99, 44, 303};

Arrays.sort(arr, (i1, i2) -> i2 - i1);

System.out.println("Sorted arr[] : " + Arrays.toString(arr));

 

ex) 문자열 길이로 비교

String[] arr = {"Apple", "Kiwi", "Orange", "Banana", "Watermelon", "Cherry"};

Arrays.sort(arr, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
});

System.out.println("Sorted arr[] : " + Arrays.toString(arr));

Ouput:

Sorted arr[] : [Kiwi, Apple, Orange, Banana, Cherry, Watermelon]

Lambda

String[] arr = {"Apple", "Kiwi", "Orange", "Banana", "Watermelon", "Cherry"};

Arrays.sort(arr, (s1, s2) -> s1.length() - s2.length());

System.out.println("Sorted arr[] : " + Arrays.toString(arr));

 

 

https://codechacha.com/ko/java-sorting-array/#3-string-%EB%B0%B0%EC%97%B4-%EC%A0%95%EB%A0%ACsorting