2016-12-04 3 views
1

Kann mir jemand helfen, warum dieser Code immer als wahr bewertet?Finden Sie das Auftreten von Teilzeichenfolge in Zeichenfolge mit IndexOf und Teilzeichenfolge in Java

public boolean prefixAgain(String str, int n) { 
    String prefix = str.substring(0,n-1); 
    int index = str.indexOf(prefix,n-1); 
    if (index != -1) 
    {return true;} 
    else 
    {return false;} 
} 
+0

Was versuchen Sie mit diesem Code zu erreichen? – Einar

+0

Um "wahr"? Das würde ich von diesem Code nicht erwarten. Bitte mach einen MCVE. Dieser Code findet den ersten Index der ersten 'n-1'-Zeichen eines Strings, beginnt jedoch beim Index' n-1'. Im Wesentlichen, wenn es "wahr" zurückgibt, dann werden die ersten "n-1" -Zeichen in der Folge nebeneinander wiederholt. Aber ist das die Absicht hier? – Tunaki

+0

Beachten Sie, dass Ihr if/else-Block äquivalent zu 'return index! = -1;' ist, was wahrscheinlich besser lesbar ist. – assylias

Antwort

0

Ich denke, das für Sie besser funktionieren würde:

int index = str.indexOf(prefix,0); 

Sie versuchten, den Index des Präfix am Ende zu finden, wo man (n-1) suchen. Was versuchst du genau zu erreichen?

0
package com; 
public class Mycode { 
    public static void main(String[] args) { 
     System.out.println(prefixAgain("nishikantnishikant", 11));//false - if you have repeated string it will return false till index is greater than length of the string 
     System.out.println(prefixAgain("nishikant", 3));//false -if there is no repeat, you can get false 

     System.out.println(prefixAgain("nishikant", 2));//true 
     System.out.println(prefixAgain("nishikantnishikant", 10));//true - if you have repeated string it will return true till index is equal to length of the string 
    } 
    public static boolean prefixAgain(String str, int n) { 
      String prefix = str.substring(0,n-1); 
      int index = str.indexOf(prefix,n-1); 
      if (index != -1) 
      {return true;} 
      else 
      {return false;} 
    } 
} 
0

Ich habe endlich erkannt, dass ich n statt n-1 im Code verwenden muss. Dies liegt daran, dass die Substring-Methode zwei verschiedene Konventionen für den Start- und End-Index hat.

str.substring(0,n) enthält den Startindex (0), schließt jedoch den Endindex (n) aus. Dies macht intuitiv Sinn, weil die Länge der Teilkette als solche mit n übereinstimmt.

Verwandte Themen