2012-09-07 30 views
5

मुझे दो तारों को इनपुट करने की आवश्यकता है, पहले वाला कोई भी शब्द और दूसरी स्ट्रिंग पिछली स्ट्रिंग का हिस्सा है और मुझे स्ट्रिंग की संख्या को आउटपुट करने की आवश्यकता है संख्या दो होती है। तो उदाहरण के लिए: स्ट्रिंग 1 = CATSATONTHEMAT स्ट्रिंग 2 = एटी। आउटपुट 3 होगा क्योंकि ATATATATTHEMAT में एटी तीन बार होता है।किसी अन्य स्ट्रिंग में एक स्ट्रिंग की घटनाओं की संख्या प्राप्त करना

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 

    String word8 = sc.next(); 
    String word9 = sc.next(); 
    int occurences = word8.indexOf(word9); 
    System.out.println(occurences); 
} 

यह 1 आउटपुट जब मैं इस कोड का उपयोग करें: यहाँ मेरी कोड है।

+1

'indexOf' एक गिनती वापस नहीं करता है, यह पहली उपस्थिति की स्थिति देता है। [जावाडॉक्स] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28java.lang.String%29) – Brian

+2

सटीक डुप्लिकेट के तारों के नीचे: http : //stackoverflow.com/questions/12309109/comparing-a-substring-to-a-string-in-java – JTMon

+0

@ ब्रायन यही कारण है कि वह मदद मांग रहा है। वैसे भी, बचाव के लिए regex? –

उत्तर

3

आप भी आजमा सकते:

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 

    String word8 = sc.nextLine(); 
    String word9 = sc.nextLine(); 
    int index = word8.indexOf(word9); 
    sc.close(); 
    int occurrences = 0; 
    while (index != -1) { 
     occurrences++; 
     word8 = word8.substring(index + 1); 
     index = word8.indexOf(word9); 
    } 
    System.out.println("No of " + word9 + " in the input is : " + occurrences); 
} 
+1

अहह मैं थोड़ी देर के लूप भाग को नहीं देख रहा था बहुत बहुत धन्यवाद। – Eric

+1

अपने स्कैनर को बंद करने के लिए मत भूलना। – arshajii

11

दिलचस्प समाधान:

public static int countOccurrences(String main, String sub) { 
    return (main.length() - main.replace(sub, "").length())/sub.length(); 
} 

मूल रूप से हम यहाँ कर रहे हैं स्ट्रिंग main में sub के सभी उदाहरणों को हटाने से उत्पन्न की लंबाई से main की लंबाई घटाकर है - हम तो इस संख्या से विभाजित sub की लंबाई निर्धारित करने के लिए कि sub कितनी घटनाएं हटा दी गई हैं, हमें हमारा उत्तर दे दिया गया है।

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 

    String word8 = sc.next(); 
    String word9 = sc.next(); 
    int occurrences = countOccurrences(word8, word9); 
    System.out.println(occurrences); 

    sc.close(); 
} 
+1

+1 :) – JTMon

+1

चालाक :) लेकिन ['.replace'] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replace%28java .lang.CharSequence,% 20java.lang.CharSequence% 29) बेहतर होगा क्योंकि यह '.replaceAll' जैसे नियमित अभिव्यक्तियों का उपयोग नहीं करता है, और यह वही अर्थशास्त्र है जैसा आप इसका उपयोग कर रहे हैं। – Brian

+0

हाँ अच्छा बिंदु - तय। – arshajii

0

एक अन्य विकल्प:

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 

    String word8 = sc.next(); 
    String word9 = sc.next(); 
    int occurences = word8.split(word9).length; 
    if (word8.startsWith(word9)) occurences++; 
    if (word8.endsWith(word9)) occurences++; 
    System.out.println(occurences); 

    sc.close(); 
} 

startsWith और endsWith आवश्यक हैं

तो अंत में आप कुछ इस तरह होता है क्योंकि split() रिक्त तारों का पीछा करते हुए निकलता है।

1

कोई भी सबसे स्पष्ट और तेज़ समाधान क्यों पोस्ट नहीं करता है?

int occurrences(String str, String substr) { 
    int occurrences = 0; 
    int index = str.indexOf(substr); 
    while (index != -1) { 
     occurrences++; 
     index = str.indexOf(substr, index + 1); 
    } 
    return occurrences; 
}