2011-06-02 4 views
5

में इनट्स के दो तारों की तुलना करें मेरे पास दो स्ट्रिंग हैं जिनमें संख्याएं हैं और मैं देखना चाहता हूं कि दूसरी स्ट्रिंग में पहले स्ट्रिंग के समान संख्याएं हों, चाहे वे क्रम में हों या नहीं। यदि इसकी रिपोर्ट झूठी रिपोर्ट से दोहराई गई है। क्या .charAt() का उपयोग करने के अलावा जावा में वैसे भी है क्योंकि यह 10 के बाद संख्या के लिए काम नहीं कर रहा है?जावा

String one = "1 2 3 4 5 "; 
String two = " 3 2 1 4 5 "; 
String three = "3 2 1 4 4 "; 

उत्तर

7

होमवर्क की तरह दिखता है। तो आप इन चरणों का पालन कर सकते हैं:

  • Trim दोनों तार
  • Convert ArrayList में दोनों तार अंतरिक्ष विभाजक
  • Sort दोनों सरणियों का उपयोग कर संख्यानुसार
  • Compare दोनों सरणियों
+1

यह पिछले साल की परियोजना का होमवर्क नहीं करता है कि मैं अभ्यास के लिए फिर से काम कर रहा हूं। –

+3

@ सिबघाटुक - एक ही सिद्धांत लागू होता है। यदि हम आपको संकेत देते हैं तो आप ** अधिक ** सीखेंगे और आप अपने लिए पूरा उत्तर तैयार करेंगे। यही वह है जो आप करने की कोशिश कर रहे हैं ... है ना? –

-1

int में तारों को पार्स करने का प्रयास करें।

Integer.parseInt(One).intValue() == Integer.parseInt(two).intValue() 

मुझे यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं लेकिन मेरा अनुमान है कि आप सरणी का उपयोग करना बेहतर करेंगे।

+1

आप इसे में रिक्त स्थान के साथ एक स्ट्रिंग से किसी पूर्णांक पार्स नहीं कर सकता - आप मिल जाएगा एक 'NumberFormatException' – Bohemian

0

आप रिक्त स्थान के आधार पर तारों को टोकन/विभाजित कर सकते हैं, फिर परिणामी टोकन के माध्यम से लूप कर सकते हैं जो संख्याएं स्वयं होंगी।

4

स्ट्रिंग से संख्याओं को पढ़ने के लिए आप Scanner.nextInt() का उपयोग कर सकते हैं, उन्हें Set पर जोड़ें, और देखें कि set1.equals(set2) सत्य है या नहीं।

0

आप तार विभाजित व्हाइटस्पेस पर (String.split या StringTokenizer का उपयोग करके) और उसके बाद प्रत्येक को परिवर्तित करें ई टोकन एक संख्या में। सभी नंबरों को स्ट्रिंग में HashSet में रखें। स्ट्रिंग दो के लिए वही करें। अब आपको यह जांचना है कि पहले HashSet में प्रत्येक प्रविष्टि भी दूसरे में होती है या नहीं।

+0

एमएके - ओपी डुप्लिकेट की संभावना का उल्लेख करता है। इसका मतलब है कि आपका समाधान हमेशा काम नहीं करेगा। –

+0

@ स्टीफन सी: यह सच है। लेकिन सेट में डालने के दौरान वह हमेशा डुप्लिकेट की जांच कर सकता है। सवाल गृहकार्य की तरह लग रहा था, इसलिए मैं बहुत ज्यादा नहीं देना चाहता था। – MAK

2

मैं कच्चे तारों की तुलना नहीं करता। इसके बजाय, प्रत्येक परिणाम पर प्रत्येक String को List<Integer> पर String.split() और Integer.parseInt() का उपयोग करके पहले कनवर्ट करें। फिर sort() सूचियों को आरोही क्रम में सूचीबद्ध करता है, और फिर उनकी तुलना करना बहुत आसान हो जाता है।

2

इस तरह प्रयास करें।

String one = "1 2 3 4 5 "; 
String two = " 3 2 1 4 5 "; 
Set<String> a = new HashSet<String> (Arrays.asList(one.trim().replaceAll("\\s*"," ").split(" "))); 
Set<String> b = new HashSet<String> (Arrays.asList(two.trim().replaceAll("\\s*"," ").split(" "))); 
boolean ret = (a.size() == b.size()) && a.containsAll(b); 
0

मैं पूर्णांक के रूप में पहले पार्स संख्या में होगा, उन्हें सेट करने के लिए रखा और उनकी तुलना:

import java.util.SortedSet; 
import java.util.StringTokenizer; 
import java.util.TreeSet; 


public class StringsCompare { 

    private static String one = "1 2 3 4 5 6"; 
    private static String two = " 3 2 1 5 6 4 "; 

    public static void main(String[] args) { 
     StringsCompare sc = new StringsCompare(); 

     System.out.println(sc.compare(one, two)); 
    } 

    private boolean compare(String one, String two) { 

     SortedSet<Integer> setOne = getSet(one);  
     SortedSet<Integer> setTwo = getSet(two); 

     return setOne.equals(setTwo); 
    } 

    private SortedSet<Integer> getSet(String str) { 
     SortedSet<Integer> result = new TreeSet<Integer>(); 

     StringTokenizer st = new StringTokenizer(str, " "); 

     while (st.hasMoreTokens()) { 
      result.add(Integer.valueOf(st.nextToken())); 
     } 

     return result; 
    } 
}