2013-08-20 3 views
14

हाय दो तार के बीच अंतर निकालें मैं दो तार है:में जावा

String hear = "Hi My name is Deepak" 
      + "\n" 
      + "How are you ?" 
      + "\n" 
      + "\n" 
      + "How is everyone"; 
    String dear = "Hi My name is Deepak" 
      + "\n" 
      + "How are you ?" 
      + "\n" 
      + "Hey there \n" 
      + "How is everyone"; 

मैं क्या सुन स्ट्रिंग है कि में मौजूद नहीं है प्राप्त करना चाहते हैं "अरे वहाँ n \"। मुझे एक विधि मिली, लेकिन यह इस मामले के लिए विफल रहता है:

static String strDiffChop(String s1, String s2) { 
    if (s1.length() > s2.length()) { 
     return s1.substring(s2.length() - 1); 
    } else if (s2.length() > s1.length()) { 
     return s2.substring(s1.length() - 1); 
    } else { 
     return ""; 
    } 
} 

क्या कोई भी मदद कर सकता है?

+1

मुझे लगता है कि अंतरिक्ष पर आधारित एक और दृष्टिकोण स्ट्रिंग को विभाजित किया जा सकता है और फिर प्रत्येक तत्व पर लूप हो सकता है? – kosa

+0

हां नंबारी, धन्यवाद। यह जो मैंने किया है । –

उत्तर

7

कोई Apache Commons से StringUtils का उपयोग कर सकता है। यहां StringUtils API है।

public static String difference(String str1, String str2) { 
    if (str1 == null) { 
     return str2; 
    } 
    if (str2 == null) { 
     return str1; 
    } 
    int at = indexOfDifference(str1, str2); 
    if (at == -1) { 
     return EMPTY; 
    } 
return str2.substring(at); 
} 
public static int indexOfDifference(String str1, String str2) { 
    if (str1 == str2) { 
     return -1; 
    } 
    if (str1 == null || str2 == null) { 
     return 0; 
    } 
    int i; 
    for (i = 0; i < str1.length() && i < str2.length(); ++i) { 
     if (str1.charAt(i) != str2.charAt(i)) { 
      break; 
     } 
    } 
    if (i < str2.length() || i < str1.length()) { 
     return i; 
    } 
    return -1; 
} 
1

आप अपाचे कॉमन्स

+0

हां, मैंने इसके बारे में बहुत कुछ सुना है। –

2

से StringUtils का उपयोग सूची में स्ट्रिंग परिवर्तित करना चाहिए और उसके बाद प्राप्त करने के लिए निम्न विधि का उपयोग परिणाम How to remove common values from two array list

+0

मैंने तारों में से एक को विभाजित किया और सरणी पर पुनरावृत्त किया और दूसरी स्ट्रिंग में असामान्य पाया। –

22

google-diff-match-patch

Diff मैच और पैच पुस्तकालयों सादा पाठ सिंक्रनाइज़ करने के लिए आवश्यक संचालन करने के लिए मजबूत एल्गोरिदम प्रदान करें।

Diff:

सादा पाठ के दो ब्लॉकों की तुलना करें और कुशलता से मतभेद की एक सूची प्रदान।

मैच:

एक खोज स्ट्रिंग को देखते हुए, सादा पाठ के एक ब्लॉक में अपने सबसे अच्छे रूप फजी मैच पाते हैं। सटीकता और स्थान दोनों के लिए भारित।

पैच:

सादा पाठ पर पैच की एक सूची को लागू करें। अंतर्निहित पाठ मेल नहीं खाता है, भले ही पैच लागू करने के लिए सर्वोत्तम प्रयास करें।

वर्तमान में जावा, जावास्क्रिप्ट, डार्ट, सी ++, सी #, उद्देश्य सी, लुआ और पायथन में उपलब्ध है। भाषा के बावजूद, प्रत्येक पुस्तकालय में एक ही एपीआई और समान कार्यक्षमता होती है। सभी संस्करणों में व्यापक परीक्षण harnesses भी है।

Line or word diffs विकी पृष्ठ है जो वर्णन करता है कि लाइन-दर-रेखा diffs कैसे करें।

+0

धन्यवाद माइक। :-) –

+2

क्या एक शानदार lib है। धन्यवाद। – sebnukem

-1

इस स्निपेट के बारे में क्या?

public static void strDiff(String hear, String dear){ 
    String[] hr = dear.split("\n"); 
    for (String h : hr) { 
     if (!hear.contains(h)) { 
      System.err.println(h); 
     } 
    } 
} 
+0

@ माइकसमुएल ने सही समाधान पोस्ट किया है। यह एक सच diff है। 'स्ट्रिंग.contains()' विफल हो जाएगा यदि पाठ सामग्री मिलान की जा रही है इसकी लाइनों को फिर से व्यवस्थित किया गया है। –

2

मैं समाधान खोजने के लिए StringTokenizer इस्तेमाल किया है। नीचे दिए कोड स्निपेट

public static List<String> findNotMatching(String sourceStr, String anotherStr){ 
    StringTokenizer at = new StringTokenizer(sourceStr, " "); 
    StringTokenizer bt = null; 
    int i = 0, token_count = 0; 
    String token = null; 
    boolean flag = false; 
    List<String> missingWords = new ArrayList<String>(); 
    while (at.hasMoreTokens()) { 
     token = at.nextToken(); 
     bt = new StringTokenizer(anotherStr, " "); 
     token_count = bt.countTokens(); 
     while (i < token_count) { 
      String s = bt.nextToken(); 
      if (token.equals(s)) { 
       flag = true; 
       break; 
      } else { 
       flag = false; 
      } 
      i++; 
     } 
     i = 0; 
     if (flag == false) 
      missingWords.add(token); 
    } 
    return missingWords; 
} 
+0

तृतीय पक्ष निर्भरता के बजाय कोर जावा भाषा ऑब्जेक्ट का उपयोग करके कम जटिल कोड बनाता है! – bakoyaro

0

मैं कुछ समाधान के लिए देख रहा था, लेकिन एक मैं जरूरत नहीं पा सके है, इसलिए मैं पाठ की दो संस्करण की तुलना के लिए एक उपयोगिता श्रेणी का निर्माण - नए और पुराने - और साथ परिणाम पाठ हो रही टैग के बीच परिवर्तन - [जोड़ा] और [हटाया गया]। इसे आसानी से इस टैग के बजाय आपके द्वारा चुने गए हाइलाइटर के साथ प्रतिस्थापित किया जा सकता है, उदाहरण के लिए: एक HTML टैग। string-version-comparison

किसी भी टिप्पणी की सराहना की जाएगी।

* यह हटाए गए वाक्यांशों को खोजने की उच्च संभावना के कारण लंबे टेक्स्ट के साथ अच्छा काम नहीं कर सकता है।

संबंधित मुद्दे