2016-07-09 5 views
0

Liste der Kamel Fall Strings: [ ‚HelloMars‘, ‚Hello World‘, ‚HelloWorldMars‘, ‚HiHo‘]Schreiben Sie eine Funktion, die eine Liste gegeben und ein Muster liefert die passenden Elemente

Testfälle:

  • H -> [HelloMars, Hello World, HelloWorldMars, HiHo]
  • HW -> [Hello World, HelloWorldMars]
  • Ho -> []
  • HeWorM -> [HelloWorldMars]
  • 012.

hier ist, was ich ausprobiert:

private static List<String> findMatchingCamel(String patter){ 
    List<String> result=new ArrayList<String>(); 
    List<String> myData=Arrays.asList("HelloMars","HelloWorld","HelloWorldMars","HiHo"); 

    String[] upperCasePattern=splitBasedOnUpperCaseLetter(patter); 
    for(String str1:myData){ 
     boolean found=true; 
     for(String s:upperCasePattern){ 
      if(str1.indexOf(s)==-1) 
      { 
       found=false; 
       break; 
      } 
     } 
     if(found) 
      result.add(str1); 
    } 
    return result; 
} 

private static String[] splitBasedOnUpperCaseLetter(String str){ 
    String[] result=str.split("(?=[A-Z])"); 
    return result; 
} 

meiner Funktion funktioniert nicht auf Fälle beispielsweise auf, wenn das Muster ist Ho es HiHo zurückkehrt. Wie kann ich es verbessern? behebe den Fehler und gib auch das Ergebnis in der kürzest möglichen Zeit zurück?

+0

versuchen regex und ersetzen Sie die Eingabezeichenfolge setzen '*' vor jedem Großbuchstaben (außer dem ersten), und am Ende des Strings ... In Ihrem Beispiel. "H. *", "* H. W. *", "Ho. *" und "He. * Wor. * M. *" – lmcarreiro

Antwort

0

Sie müssen prüfen, ob das Wort in der Reihenfolge der Daten ist, so

private static List<String> findMatchingCamel(String patter){ 
    List<String> result=new ArrayList<String>(); 
    // Split the data on UpperCase too 
    List<String[]> myData=Arrays.asList(
     splitBasedOnUpperCaseLetter("HelloMars"), 
     splitBasedOnUpperCaseLetter("HelloWorld"), 
     splitBasedOnUpperCaseLetter("HelloWorldMars"), 
     splitBasedOnUpperCaseLetter("HiHo") 
    ); 

    String[] upperCasePattern = splitBasedOnUpperCaseLetter(patter); 
    for(String[] str1:myData){ 
     boolean valid = true; 
     if(upperCasePattern.length() <= str1.length()) 
      // For the UpperCase splits length 
      for(int i=0; i<upperCasePattern.length(); i++){ 
       // If string do not match the start of the data 
       if(!upperCasePattern[i].equals(str1[i].substring(0,upperCasePattern[i].length())){ 
        // Go on the next data 
        valid = false; 
        break; 
       } 
      } 
      if(valid) 
       result.add(str1.toString()); 
     } 
    } 
    return result; 
} 
+0

bin immer aufrufen kann nicht() auf dem Array-Typ String [] bei 'Ergebnis kommen .add (str1.join()); '' –

+0

result.add (str1.toString()); 'nur die Saiten verketten. – GramThanos

+0

'' wenn Linie java.lang.StringIndexOutOfBoundsException wirft (upperCasePattern [i] .equals (str1 [i] .substring (0, upperCasePattern [i] .length()))!): String-Index außerhalb des Bereichs: 2, wenn Muster ‚Ho‘ –

0

Im folgenden Zustand überprüfen Sie, ob das Muster im String vorhanden

for(String s:upperCasePattern){ 
     if(str1.indexOf(s)==-1) 
     { 
      found=false; 
      break; 
     } 
    } 

Aber das Prasseln sollte in der angegebenen Reihenfolge angegeben werden. Was Sie tun können, ist, dass Sie jede Zeichenfolge in den myData ähnlich wie Muster teilen können. Dann versuchen beide String zu array.If das Muster in der gespaltet String-Arrays myData gibt es für den gleichen Index wie upperCasePattern. Code könnte wie folgt aussehen:

for(String str1:myData){ 

    String[] upperCaseMyData = splitBasedOnUpperCaseLetter(str1); 

    boolean found=true;int length = 0; 

    if(upperCaseMyData.length<upperCasePatter.length) 
    { 
     length = upperCaseMyData.length; 
    } 
    else 
    { 
     length = upperCasePatter.length; 
    } 
    for(int i=0;i<length;i++) 
    { 
     if(upperCaseMyData[i].indexOf(upperCasePatter[i])==-1) 
     { 
      found=false; 
      break; 
     } 
    } 
    if(found) 
     result.add(str1); 
} 
+0

Vielen Dank für Ihren Vorschlag, aber die Testfälle funktionieren nicht –

Verwandte Themen