2016-07-09 12 views
0

リストを返す: [「HelloMars」、「のHelloWorld」、「HelloWorldMars」、「秘宝」]リストを所与の機能を記述し、パターンマッチング要素をキャメルケース文字列の

テストケース:

  • H - > [HelloMars、HelloWorldの、HelloWorldMars、秘宝]
  • HW - > [HelloWorldの、HelloWorldMars]
  • ホー - > []
  • HeWorM - > [HelloWorldMars]
  • ここ

は私が試してみたものです:

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; 
} 

私の機能は、パターンは、それが秘宝を返しているホーあるときに例えば例に取り組んでいません。どうすればそれを改善できますか?バグを修正し、可能な限り最小限の時間で結果を返しますか?

+0

は、正規表現を使って試してみて、あなたの入力文字列置くことを '置き換え*'(最初のものを除く)の各大文字の前に、文字列の末尾に...あなたの例では、。 – lmcarreiro

答えて

0

あなたは、パターンが文字列

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

しかし、パタパタに存在するかどうかをチェック以下の条件ではそう

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

が見つかりました配列型String []のresult()で、join()を呼び出せません.add(str1.join()); ' –

+0

' result.add(str1.toString()); '文字列を連結するだけです。 – GramThanos

+0

'if(!upperCasePattern [i] .equals(str1 [i] .substring(0、upperCasePattern [i] .length())))'行がスローしていますjava.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です2パターンは 'Ho' –

0

、言葉があなたのデータの順であるかどうかを確認する必要があります与えられた順序でなければならない。あなたは、myDataの各文字列をパターンと同様に分割することができます。次に、両方の文字列の配列を一致させてみます。パターンがmyCaseの分割された文字列配列内にある場合、upperCasePatternと同じインデックスになります。コードは次のようになります。

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

提案していただきありがとうございますが、提供されたテストケースでは動作しません –

関連する問題