programing

알파벳 순서로 문자열 비교

prostudy 2022. 9. 4. 11:56
반응형

알파벳 순서로 문자열 비교

String s1 = "Project";
String s2 = "Sunject";

위의 두 문자열을 알파벳 순서로 비교하고 싶습니다(이 경우 "Project" 다음 "Sunject"는 "P" 앞에 있음).자바에서 어떻게 하는지 아는 사람 있어요?

String.compareTo필요할 수도 있고 아닐 수도 있습니다.

현지화된 문자열 순서가 필요한 경우 이 링크를 참조하십시오.

방법을 살펴보세요.

s1.compareTo(s2)

javadocs에서:

이 String 객체가 사전 편집상 인수 문자열 앞에 있는 경우 결과는 음의 정수입니다.이 String 객체가 인수 문자열을 사전 편집적으로 뒤따르는 경우 결과는 양의 정수입니다.문자열이 같은 경우 결과는 0입니다.compareTo는 equals(Object) 메서드가 true를 반환할 때 정확히 0을 반환합니다.

String a = "..."; 
String b = "...";  

int compare = a.compareTo(b);  

if (compare < 0) {  
    //a is smaller
}
else if (compare > 0) {
    //a is larger 
}
else {  
    //a is equal to b
} 

어느 문자열의 compareTo 메서드(java.lang)를 호출할 수 있습니다.String.compareTo).이 기능은 Java 문서 사이트에 잘 설명되어 있습니다.

다음은 이를 보여주는 짧은 프로그램입니다.

class StringCompareExample {
    public static void main(String args[]){
        String s1 = "Project"; String s2 = "Sunject";
        verboseCompare(s1, s2);
        verboseCompare(s2, s1);
        verboseCompare(s1, s1);
    }

    public static void verboseCompare(String s1, String s2){
        System.out.println("Comparing \"" + s1 + "\" to \"" + s2 + "\"...");

        int comparisonResult = s1.compareTo(s2);
        System.out.println("The result of the comparison was " + comparisonResult);

        System.out.print("This means that \"" + s1 + "\" ");
        if(comparisonResult < 0){
            System.out.println("lexicographically precedes \"" + s2 + "\".");
        }else if(comparisonResult > 0){
            System.out.println("lexicographically follows \"" + s2 + "\".");
        }else{
            System.out.println("equals \"" + s2 + "\".");
        }
        System.out.println();
    }
}

다음은 그 기능을 보여주는 라이브 데모입니다.http://ideone.com/Drikp3

국유화 후의 알파벳 순서는 를 사용합니다.

//Get the Collator for US English and set its strength to PRIMARY
Collator usCollator = Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);
if( usCollator.compare("abc", "ABC") == 0 ) {
    System.out.println("Strings are equivalent");
}

지원되는 로케일 목록은 JDK 8 및 JRE 8 지원 로케일을 참조하십시오.

import java.io.*;
import java.util.*;
public class CandidateCode {
    public static void main(String args[] ) throws Exception {
       Scanner sc = new Scanner(System.in);
           int n =Integer.parseInt(sc.nextLine());
           String arr[] = new String[n];
        for (int i = 0; i < arr.length; i++) {
                arr[i] = sc.nextLine();
                }


         for(int i = 0; i <arr.length; ++i) {
            for (int j = i + 1; j <arr.length; ++j) {
                if (arr[i].compareTo(arr[j]) > 0) {
                    String temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        for(int i = 0; i <arr.length; i++) {
            System.out.println(arr[i]);
        }
   }
}

다른 사람들이 언급했듯이,String.compareTo단, 모든 대문자는 모든 소문자 앞에 정렬되므로 "Z"는 "a" 앞에 나옵니다.

대소문자를 불문하고 알파벳 순서로 정렬하려면('a'가 'Z' 앞에 오도록) 다음을 사용할 수 있습니다.

s1.compareToIgnoreCase(s2);

이것은 다음과 같은 경우 음의 정수를 반환합니다.s1보다 우선하다s2, 만약의 경우 양의 정수입니다.s2보다 우선하다s1같으면 0이 됩니다.이 메서드는 대소문자를 완전히 무시하기 때문에 예를 들어 대소문자만 다른2개의 문자열은 동등하다고 간주됩니다."ABC".compareToIgnoreCase("abc")0이 반환됩니다.

String s1 = "Project";
String s2 = "Sunject";

//print smaller one using compareTo() function
if(s1.compareTo(s2)<0) System.out.println(s1);
//if s1 is smaller then function returns negative which is less than 0 so s1 
//is smaller
else System.out.println(s2); // else s2 is smaller

//print larger one using compareTo() function
if(s1.compareTo(s2)>0) System.out.println(s1);
//is s1 is larger function will give positive so print s1 else s2 
else System.out.println(s2);

다른 사람들이 제안했듯이String.compareTo(String).

그러나 Strings 목록을 정렬할 때 필요한 경우Comparator를 실장할 필요는 없습니다.Comparator.naturalOrder()또는Comparator.reverseOrder().

Person.java

import java.util.Objects;
public class Person implements Comparable {
String firstName;
String lastName;
Integer age;
Integer DOBYear;

public Person(String firstName, String lastName, Integer age, Integer DOBYear) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
    this.DOBYear = DOBYear;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}

public Integer getDOBYear() {
    return DOBYear;
}

public void setDOBYear(Integer DOBYear) {
    this.DOBYear = DOBYear;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return Objects.equals(firstName, person.firstName) && Objects.equals(lastName, person.lastName) && Objects.equals(age, person.age) && Objects.equals(DOBYear, person.DOBYear);
}

@Override
public int hashCode() {
    return Objects.hash(firstName, lastName, age, DOBYear);
}

@Override
public int compareTo(Object o) {
    Person p = (Person) o;
    return p.getAge() > this.getAge() ? -1: p.getAge() == this.getAge() ? 0 : 1;
}

@Override
public String toString() {
    return "Person{" +
            "firstName='" + firstName + '\'' +
            ", lastName='" + lastName + '\'' +
            ", age=" + age +
            ", DOBYear=" + DOBYear +
            '}';
}

}

Person Name Comparator

import java.util.Comparator;

public class PersonNameComparator implements Comparator<Person> {


@Override
public int compare(Person o1, Person o2) {
    return o1.getFirstName().compareTo(o2.getFirstName());
}

}

PersonTest.java#

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class PersonTest {
public static void main(String args[]){

    System.out.println("Hello World");
    Person p1 = new Person("Umesh","Bhutada",31,1991);
    Person p2 = new Person("Deepali","Baheti",29,1992);
    Person p3 = new Person("Romeet","Zanwar",5,2017);

    ArrayList<Person> arr1 = new ArrayList<Person>( Arrays.asList(p1,p2,p3));
    Collections.sort(arr1);

    arr1.forEach(person -> {System.out.println( person);});

    System.out.println("End of World");

    System.out.println("test 2");

    Collections.sort(arr1,new PersonNameComparator());
    arr1.forEach(person -> {System.out.println( person);});

}

}

언급URL : https://stackoverflow.com/questions/6203411/comparing-strings-by-their-alphabetical-order

반응형