알파벳 순서로 문자열 비교
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
'programing' 카테고리의 다른 글
@Mock, @MockBean 및 Mockito.mock()의 차이점 (0) | 2022.09.04 |
---|---|
목록을 쉼표로 구분하는 가장 간단한 방법? (0) | 2022.09.04 |
입력/출력 스트림을 사용하는 Java 프로세스 (0) | 2022.09.04 |
Java 오류:기본 생성자에 대해 암시적 수퍼 생성자가 정의되지 않았습니다. (0) | 2022.09.04 |
VueJs의 전체 애플리케이션에서 액세스할 수 있는 상수를 만드는 가장 좋은 방법은 무엇입니까? (0) | 2022.09.04 |