2017-05-07 2 views
-1

Ich arbeite an dem folgenden Programm. aber es gibt mir nicht die richtige Ausgabe für die Zeichenfolge "namesiskhan" und Teilzeichenfolge als "name". Ich weiß, dass dies eine doppelte Frage sein könnte, aber ich konnte die gewünschte Antwort in diesen Fragen nicht finden.Finden Teilstring in einer gegebenen Zeichenfolge durch Ändern in Char-Array

import java.util.*; 
import java.lang.String; 

public class CheckingSubstring2 { 
public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter a String: "); 
    String string1 = input.next(); 
    System.out.println("Please enter a second String: "); 
    String substring = input.next(); 
    if (isSubstring(string1, substring)) { 
     System.out.println("The second string is a substring of the first."); 
    } else { 
     System.out.println("The second string is NOT a substring of the first."); 
    } 
} 
public static boolean isSubstring(String string1, String substring) { 
    char c[]=string1.toCharArray(); 
    char d[]=substring.toCharArray(); 
    boolean match = true; 
    for (int i = 0; i < c.length; i++) { 
     for (int j = 0; j < d.length; j++) { 
      if (c[i] == d[j]) { 
       match = true; 
      } else { 
       match = false; 
      } 
     } 
    } 
    return match; 

} 
} 
+0

Willkommen bei Stack Overflow! Es sieht so aus, als müssten Sie lernen, einen Debugger zu verwenden. Bitte helfen Sie sich selbst [https://ericlippert.com/2014/03/05/how-to-debug-small-programs/]. Wenn Sie danach immer noch Probleme haben, können Sie gerne mit einem [minimalen, vollständigen und überprüfbaren Beispiel] (http://stackoverflow.com/help/mcve) zurückkommen, das Ihr Problem demonstriert. –

Antwort

1

Wie Sie es ohne contains, wie wäre es, dies zu tun?

Was ich hier mache ist, dass die ursprüngliche Zeichenfolge einen Durchgang durchlaufen und prüfen, ob die substring als fortlaufende Zeichen in der Haupt String gefunden werden kann.

public static boolean isSubstring(String string1, String substring) { 
    char c[]=string1.toCharArray(); 
    char d[]=substring.toCharArray(); 

    for (int i = 0; i < c.length; i++) { 
     if(c[i] == d[0]){ 
      boolean match = false; 
      for(int j = 0; j < d.length; j++){ 
       if(c[i+j] != d[j]){ 
        match = false; 
        break; 
       } else{ 
        match = true; 
       } 
      } 

      if(match) return true; 
     } 
    } 
    return false; 
} 
+0

dieses Programm funktioniert nicht für "Hallo" und "lo" – thebrightshadow

+0

@thebrightshadow Es war ein Fehler in meiner Logik, wenn wir zwei aufeinanderfolgende Buchstaben gleich haben. Fixed it –

+0

das funktioniert gut für Buchstaben zweimal wiederholt. Es funktioniert nicht im Falle der Wiederholung von Buchstaben mehr als einmal in einem Teilstring – thebrightshadow

0

Ich würde vorschlagen, sich mit verschiedenen Debugging-Techniken vertraut zu machen. Ein sehr schnelles und einfaches ist eine Druckanweisung. Sie können beispielsweise die Werte, die Sie vergleichen, ausdrucken, um sicherzustellen, dass sie vernünftig erscheinen. Es zeigt Ihnen auch an, wie oft Ihre Schleife läuft. Beim Durchlaufen des Algorithmus sind die ersten beiden zu vergleichenden Zeichen c [0] = 'n' und d [0] = 'n'. Das ist gut. Die nächsten zwei sind c [0] = 'n' und d [1] = 'a'. Das ist nicht. Außerdem nehme ich an, dass Sie beabsichtigen, das Programm zu beenden, wenn es einen Teilstring findet, aber es scheint nicht, dass es dies tun würde. Ebenso sollten Sie nicht jedes Element der Teilzeichenfolge vergleichen, wenn ein Vergleich bereits falsch war.

Verwandte Themen