2012-04-28 13 views
13

मैं जावा में स्ट्रिंग प्रोसेसिंग के आधार पर एक प्रोग्राम बना रहा हूं जिसमें मुझे स्ट्रिंग सरणी से डुप्लिकेट स्ट्रिंग को हटाने की आवश्यकता है। इस कार्यक्रम में, सभी तारों का आकार समान है।स्ट्रिंग सरणी में डुप्लिकेट स्ट्रिंग हटाएं

'सरणी' जो एक स्ट्रिंग सरणी है जिसमें कई तार होते हैं जिसमें दो तार एक-दूसरे के समान होते हैं। तो नीचे दिए गए कोड का उपयोग करके डुप्लिकेट स्ट्रिंग को हटा दिया जाना चाहिए लेकिन इसे हटाया नहीं गया है।

डुप्लिकेट स्ट्रिंग को कैसे हटाएं?

मैं निम्नलिखित कोड का उपयोग कर रहा हूं।

for(int s=0;s<array.length-1;s++) 
    { 
     for(int m=0;m<array.length;m++) 
     { 
       for(int n=0;n<array[m].length();n++) 
       { 
        if(array[s].charAt(n)==array[m].charAt(n)) 
        { 
         continue; 
        } 
        else 
       break; 
     } 
     if(n==array[m].length()) 
     { 
      ArrayUtils.removeElement(array, array[s]); 
     } 
    } 
+0

वास्तव में कोड तुम अब मिल गया है के साथ गलत क्या है? – Andy

+3

डुप्लिकेट को हटाने के लिए बेहतर संरचना का उपयोग क्यों नहीं करते हैं, उदाहरण के लिए हैशसेट की तरह, सरणी के बजाय? – assylias

+0

क्या आप बता सकते हैं कि हैशसेट का उपयोग कर कोड क्या है? –

उत्तर

26

यह

array = new HashSet<String>(Arrays.asList(array)).toArray(new String[0]); 

काम करेंगे या सिर्फ एक सरणी के बजाय एक HashSet का उपयोग करें।

+1

@ गेटेट हॉल इस दृष्टिकोण को अनुकूलित किया जाएगा? –

+3

क्या के लिए अनुकूलित किया गया? –

+2

अपने भविष्य के स्टार्टअप के 1 मिलियन उपयोगकर्ताओं के लिए –

1
Set<String> set = new HashSet<String>(); 
Collections.addAll(set, array); 

या

for(int s=0;s<array.length-1;s++) 
{ 
    for(int m=s + 1;m<array.length;m++) 
    { 

       if(array[s] != null && array[s].equals(array[m])) 
       { 
        // array = ArrayUtils.removeElement(array, array[s]); --m;?? 
        array[m] = null; // Mark for deletion later on 
       } 
    } 
} 
2

के साथ शुरू जब तक इस [homework] मैं का प्रयोग करेंगे एक सेट

String[] array = 
Set<String> uniqueWords = new HashSet<String>(Arrays.asList(array)); 
0
  • क्यों आप के बजाय पात्रों के माध्यम से पुनरावृत्ति की तुलना के लिए String.equals() का उपयोग नहीं करते है तारों में मैन्युअल रूप से?
  • आपका तर्क वास्तव में त्रुटिपूर्ण है: array[s] == "12345" और array[m] == "123" के लिए यह दावा है कि वे बराबर हैं
  • इसके अलावा, अपने भीतर के पाश में for(int m=0;m<array.length;m++)m भी बराबर s को कुछ बिंदु पर है, तो आप करेंगे हो जाएगा एक स्ट्रिंग की तुलना अपने आप से करें

ये नोट मानते हैं कि आपको क्लास लाइब्रेरी का उपयोग करने की अनुमति नहीं होने पर, अपने कोड के साथ हटाने तर्क को लागू करने की आवश्यकता है। यदि यह मामला नहीं है, जैसा कि अन्य ने नोट किया है, HashSet का उपयोग करना सबसे आसान तरीका है।

0

आपने String.equals(String) के पक्ष में सबसे अधिक आंतरिक लूप क्यों नहीं हटाया?

पहले पुनरावृत्ति में आप सरणी [0] की तुलना कर रहे हैं [0] जो बराबर हैं, और इसे हटा दिया जाएगा। फिर आप सरणी के सभी अन्य तत्वों के साथ मूल सरणी [1] की तुलना करेंगे, और यदि वे बराबर हैं, तो आप सरणी को हटा रहे हैं [1] (दूसरे नहीं)।

कुछ समस्याएं हैं, यदि कुछ डुप्लिकेट स्ट्रिंग्स हैं, तो आप पहले को हटा रहे हैं, जो r को कम किए बिना सरणी के आकार को कम करेगा, इसलिए सरणी में कुछ स्ट्रिंग्स छोड़ी गई हैं।

मैं एक डेटा संरचना का उपयोग करता हूं जो विशिष्टता को मजबूर करता है, जैसे सेट।

क्या होगा यदि आपके सरणी में 3 बराबर स्ट्रिंग हैं, तो मुझे यकीन नहीं है कि क्या होगा।

मेरा मानना ​​है कि आपको कुछ ArrayIndexOutOfBoundsException एस मिलेंगे।

0

मुझे लगता है कि अंत में अगर हालत होना चाहिए, अगर (एन == (सरणी [एम] .length() - 1))

कहा करने के बाद, आप क्या स्ट्रिंग को लागू करने की कोशिश कर रहा हो रहे हैं .equals() विधि आपके भीतर के अधिकांश लूप में होती है।

-2

डुप्लिकेट पूर्णांक निकालें: यह सही जवाब है /// हारिस ///

public static void duplicateRemove(int[] arr) { 
    int temp = 0; 

    for (int i = 0; i < arr.length; i++) { 
     for (int j = 0; j < arr.length; j++) { 
      if (arr[i] < arr[j]) { 
       temp = arr[i]; 
       arr[i] = arr[j]; 
       arr[j] = temp; 
      } 
     } 
    } 

    int count; 
    for (int j = 0; j < arr.length;) { 
     count = 1; 
     for (int i = j + 1; i < arr.length; i++) { 
      if (arr[i] == arr[j]) { 
       count++; 
      } else 
       break; 

     } 
     System.out.println(arr[j] + " is : " + count); 
     j += count; 
    } 

} 
+1

प्रश्न डुप्लिकेट STRINGS को पूर्णांक नहीं करने के संबंध में है –

0
 String[] arr = {"w10","w20","w10","w30","w20","w40","w50","w50"}; 
    List<String> arrList = new ArrayList<String>(); 
    int cnt= 0; 
     //List<String> arrList = Arrays.asList(arr); 
     List<String> lenList = new ArrayList<String>(); 
      for(int i=0;i<arr.length;i++){ 
     for(int j=i+1;j<arr.length;j++){ 
      if(arr[i].equals(arr[j])){ 
      cnt+=1; 
      }     
     } 
     if(cnt<1){ 
      arrList.add(arr[i]); 
     } 
      cnt=0; 
     } 

for(int k=0;k<arrList.size();k++){ 
      System.out.println("Array without Duplicates: "+arrList.get(k)); 
     } 
संबंधित मुद्दे