2016-08-06 35 views
-1

Hallo Ich versuche, in einem Array von Strings Im folgenden Art und Weise zu drucken:Wie behalten abgestimmte Unter Zeichenfolge und ersetzt unerreichte Teilzeichenfolgen in Java String

  • Input: big = "12xy34", klein = " xy "Ausgabe:" ** xy ** "
  • Eingabe: big =" "12xt34" ", klein =" xy "Ausgabe:" ****** "
  • Eingabe: big =" 12xy34 ", klein = "1" Ausgabe: "1 *****"
  • Eingabe: groß = "12xy34xyabcxy", klein = "xy" Ausgabe: "** xy ** xy *** xy"
  • Input: big = "78abcd78cd", klein = "78" Ausgabe: "78 **** 78 **"

Was ich eine Bedingung schreiben muß, wie bis zu erhalten?

public static String stars(String big, String small) { 
     //throw new RuntimeException("not implemented yet "); 
    char[] arr = big.toCharArray(); 
    for (int i = 0; i < arr.length; i++) { 
     if (big.contains(small)) { 
      arr[i] = '*'; 
     } 
    } 
     String a = Arrays.toString(arr); 
    return big+""+a; 

}

+0

Ihr Java-Programm ist unvollständig, schrecklich formatiert und erklärt nicht wirklich, wie die Dinge zusammen gehen sollten. Es ist unklar, wie Sie helfen können. –

Antwort

1

Algorithmus:

  1. Konvertieren big und smallString's zu char[] des Arrays bigC und smallC jeweils
  2. Iterate über jedes Zeichen von big String
  3. Bei jedem Index während der Iteration, identifizieren ob es eine Unterkette möglich ist
  4. aktuelle Zeichen beginnen, wenn eine Unterkette Möglichkeit ist, durch die Länge des small String
  5. Andernfalls den Index in big String Iteration voranbringen, ersetzen Sie den Charakter von *

Code:

public class StringRetainer { 

    public static void main(String args[]) { 
     String big[] = {"12xy34", "12xt34", "12xy34", "12xy34xyabcxy", "78abcd78cd"}; 
     String small[] = {"xy", "xy", "1", "xy", "78"}; 
     for(int i = 0; i < big.length & i < small.length; i++) { 
      System.out.println("Input: big = \"" + big[i] + "\", small = \"" + small[i] + "\" output : \"" + stars(big[i], small[i]) + "\""); 
     } 
    } 

    public static String stars(String big, String small) { 
     //String to char[] array conversions 
     char[] bigC = big.toCharArray(); 
     char[] smallC = small.toCharArray(); 
     //iterate through every character of big String and selectively replace 
     for(int i = 0; i < bigC.length; i++) { 
      //flag to determine whether small String occurs in big String 
      boolean possibleSubString = true; 
      int j = 0; 
      //iterate through every character of small String to determine 
      //the possibility of character replacement 
      for(; j < smallC.length && (i+j) < bigC.length; j++) { 
       //if there is a mismatch of at least one character in big String 
       if(bigC[i+j] != smallC[j]) { 
        //set the flag indicating sub string is not possible and break 
        possibleSubString = false; 
        break; 
       } 
      } 
      //if small String is part of big String, 
      //advance the loop index with length of small String 
      //replace with '*' otherwise 
      if(possibleSubString) 
       i = i+j-1; 
      else 
       bigC[i] = '*'; 
     } 
     big = String.copyValueOf(bigC); 
     return big; 
    } 

} 

Hinweis:

  1. Dies ist eine mögliche Lösung (legacy Art und Weise zu tun)
  2. Es gibt offenbar keinen straight forward Weg, dies zu machen geschehen mit Hilfe der integrierten in String/StringBuffer/StringBuilder Methoden