2016-06-20 4 views
1

Ich bin ein Anfänger in Java und erhielt Hausaufgaben, um eine Replik der indexOf-Methode zu erstellen, die eine Zeichenfolge als Parameter erhält. Ich muss überprüfen, ob die empfangene Zeichenkette eine Teilzeichenkette der ursprünglichen Zeichenkette ist, und wenn ja, muss ich den Index davon zurückgeben. Beispiel: Wenn die ursprüngliche Zeichenfolge "mother" ist, gibt str == "other" 1 zurück. Wenn str keine Teilzeichenfolge ist, geben Sie -1 zurück. Ich muss es nur mit den Methoden length() und/oder charAt() der String-Klasse erstellen.Erstellen meiner eigenen myindexof-Methode

Ich bin für eine lange Zeit darauf fest. Ich habe viele Arten von Codes versucht, aber nichts gelingt ...

Zum Beispiel:

public int myIndexOf1(String str) 
{ 
    String objectStr = this._st; 
    Word w3 = new Word(objectStr); 
    Word w4 = new Word(str); 
    char[] array = w3.toCharacterArray(); 

    int firstShowIndex = 0; 
    int length = array.length; 
    int max = objectStr.length() - str.length(); 
    for (int index = 0; index < max; index++) 
    { 
     for (int indexSubstring = 0; indexSubstring < str.length(); indexSubstring++) 
     { 
      if (objectStr.charAt(index) == str.charAt(indexSubstring)) 
      { 
       firstShowIndex = index; 
       break; 
      } 
      else 
       firstShowIndex = -1; 
     } 
    } 

    return firstShowIndex; 
} 

Bitte um Hilfe! Vielen Dank im Voraus!

+1

Nun, beginnen, indem loszuwerden 'w3',' w4' und 'array'. Als nächstes überlegen Sie, was diese innere Schleife tun soll. Es sollte * alle * Zeichen von 'str' mit Zeichen von' objectStr' * vergleichen, beginnend bei * 'index', d. H.' ObjectStr.charAt (index + indexSubstring) == str.charAt (indexSubstring) '. Das Ergebnis der inneren Schleife sollte ein boolescher Wert sein, der angibt, ob * alle * Zeichen übereinstimmen. Wenn ja, geben Sie den Wert von "index" zurück. Wenn die äußere Schleife endet, wurde keine Übereinstimmung gefunden, also gib '-1' zurück. Sehen Sie, ob Sie das auf die richtige Straße bringt. – Andreas

Antwort

0

Hier ist eine Lösung, die ich kam mit:

Hinweis: Es ist nicht im Rahmen einer Klasse, die einen String als privates Mitglied enthält wie Ihr tut, aber Sie können es anpassen.

public static int myIndexOf (String mainStr, String otherStr) 
{ 
    // either is null 
    if (mainStr == null || otherStr == null) 
    { 
     return -1; 
    } 

    int len = mainStr.length(); 
    int lenOfOther = otherStr.length(); 

    // special case: both strings are empty 
    if (len == 0 && lenOfOther == 0) 
    { 
     return 0; 
    } 

    // for each char in the main string 
    for (int i = 0; i < len && len - i >= lenOfOther; i++) 
    { 
     // see if we can match char for char in the otherStr 
     int k = 0; 
     while (k < lenOfOther && mainStr.charAt(k + i) == otherStr.charAt(k)) 
     { 
      k++; 
     } 
     if (k == lenOfOther) 
     { 
      return i; 
     } 
    } 

    // nothing found 
    return -1; 
} 

Nutzungs:

public static void main(String[] args) 
{ 
    String mainStr = "mother"; 
    String otherStr = "other"; 

    int index = myIndexOf(mainStr, otherStr); 
    System.out.println("My Index: " + index); 

    // Just for a sanity check 
    System.out.println("String Index: " + mainStr.indexOf(otherStr)); 
} 

Ausgänge:

My Index: 1 
String Index: 1