2015-04-16 55 views
0

我正在做一个方法,获取作为输入一个字符串数组和三个小写字母。如何检查字母顺序中是否出现字母顺序?

该方法应找到以第一个字母开头的单词,并按照它们插入的顺序包含另外两个字母。

如果一个字母被插入两次,它应该出现两次。

例如,单词expected(e,e,e)的合法单词,但单词seemed不合法。

用我的下面的代码,我得到任何输入,它是合法的,这是错误的。

public static void printWords(String[] vocabulary, 
     String firstLetter, String secondLetter, String thirdLetter){ 

    int counter=0; 
    for (String str : vocabulary){ 
     int index1=0; 
     int index2=0; 
     String newstr=str; 

     if (((str.substring(0,1).equals(firstLetter)))){ 
     newstr=str.substring(1, str.length()); 
     if (newstr.contains(secondLetter)){ 
      index1=str.indexOf(secondLetter); 
      newstr=str.substring(index2, str.length()); 
     } 
     if (newstr.contains(thirdLetter)){ 
      index2=str.indexOf(thirdLetter); 

     } 

     } 
     if (index2>index1) 
     { 
      counter++; 
      System.out.println(str); 
     } 

    } 
    System.out.println("found "+ counter+" words"); 

} 
+0

它 – CoderNeji

回答

3

这是更容易使用正则表达式来实现:

boolean matches(String word, String letter1, String letter2, String letter3) throws IllegalArgumentException { 

    String[] s = new String[] {letter1, letter2, letter3}; 

    for (String l : s) { 
     if (l.length() != 1) 
      throw new IllegalArgumentException("Wrong input, only 1-char strings are allowed!"); 
     if (l < "a" || l > "z") 
      throw new IllegalArgumentException("Wrong input, only lowercase latin letters are allowed!"); 
    } 

    Pattern regex = Pattern.compile(s[0] + ".*" + s[1] + ".*" + s[2] + ".*"); 

    // will produce a regex like "a.*b.*c.*" 

    return regex.matcher(word).matches(); 
} 
+3

请不要使用return true或false,你应该使用正则表达式,只是做:返回regex.matcher(输入).matches() – Dude

+0

我是新来的Java,我不知道什么是正则表达式,你能解释一下吗? – Tam211

+0

@确定!谢谢 –

3

如果严格来说是对给定的代码(虽然正则表达式或其他一些方法是更加优雅和更好的解决方案),它应该是:

if (((str.substring(0,1).equals(firstLetter)))){ 
    newstr=str.substring(1, str.length()); 
    if (newstr.contains(secondLetter)){ 
     index1=newstr.indexOf(secondLetter) + 1; 
     newstr=str.substring(index1 + 1, str.length()); 
    } 
    if (newstr.contains(thirdLetter)){ 
     index2=newstr.indexOf(thirdLetter) + index1 + 1; 

    } 
    ....