उनके वर्णमाला क्रम से तार की तुलना करना


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

मैं अपने वर्णमाला के क्रम से दो उपर्युक्त स्ट्रिंग की तुलना करना चाहता हूं (जो इस मामले में "प्रोजेक्ट" फिर "एस" के रूप में "पी" के रूप में "सनजेक्ट")। किसी को पता है कि जावा में कैसे करना है?

जवाबों:


121

String.compareTo हो सकता है या क्या आप की जरूरत नहीं हो सकता है।

यदि आपको स्ट्रिंग्स के स्थानीयकृत आदेश की आवश्यकता है, तो इस लिंक पर एक नज़र डालें ।


8
ध्यान दें कि निम्न-मामले "ए" से पहले पूंजीगतString#compareTo तुलनात्मक रूप से "Z" सॉर्ट करेगा। यदि आप मिश्रित-केस स्ट्रिंग को वर्णानुक्रम में बदल रहे हैं, तो आपको स्थानीय-संवेदनशील ऑर्डरिंग की आवश्यकता है। यदि स्थानीय स्तर पर स्ट्रिंग्स के स्थानीयकरण का लिंक मृत हो जाता है, तो उपयोग करने वाली चीज java.text.Collator है
द्वंद्वयुद्ध मार्करों

41
आप उपयोग भी कर सकते हैंString#compareToIgnoreCase
डोरी

1
तुम भी accentued पत्र देखने से निपटने के लिए stackoverflow.com/a/12927962/2087666
रेमी मोरिन

94

String.compareToविधि पर एक नज़र डालें ।

s1.compareTo(s2)

Javadocs से:

परिणाम एक नकारात्मक पूर्णांक है यदि यह स्ट्रिंग ऑब्जेक्ट lexicographically तर्क स्ट्रिंग से पहले है। परिणाम एक धनात्मक पूर्णांक है यदि यह स्ट्रिंग ऑब्जेक्ट lexicographically तर्क स्ट्रिंग का अनुसरण करता है। परिणाम शून्य है यदि तार बराबर हैं; तुलना (वस्तु) विधि सही होने पर तुलनात्मक रूप से 0 रिटर्न देता है।


33
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
} 

7

आप या तो स्ट्रिंग की तुलना विधि (java.lang.String.compareTo) कह सकते हैं। यह सुविधा जावा प्रलेखन साइट पर अच्छी तरह से प्रलेखित है ।

यहाँ एक छोटा कार्यक्रम है जो इसे प्रदर्शित करता है:

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


6

राष्ट्रीयकरण के बाद के वर्णमाला क्रम के लिए, का उपयोग करें Collator

//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 समर्थित स्थान देखें


1
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]);
        }
   }
}

0

जैसा कि दूसरों ने सुझाव दिया है, आप उपयोग कर सकते हैं String.compareTo(String)

लेकिन अगर आप स्ट्रिंग्स की सूची को छाँट रहे हैं और आपको इसकी आवश्यकता है Comparator, तो आपको इसे लागू करने की आवश्यकता नहीं है, आप इसका उपयोग कर सकते हैं Comparator.naturalOrder()या कर सकते हैं Comparator.reverseOrder()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.