РЕДАКТИРОВАНИЕ: Этот код соответствует установленным требованиям. Изменен счет от конца назад.
Прежде чем критиковать, ознакомьтесь с примечаниями ниже.
public static void main(String[] args)
{
String line = "ALONE AMEND DATES DAWNS DEALS LEMON LENDS";
for (int maxVowelAtChar = 1; maxVowelAtChar < 6; maxVowelAtChar++)
{
String pure = myFunc(line, maxVowelAtChar);
System.out.println(maxVowelAtChar + ": " + pure);
}
}
private static String myFunc(String line, int maxVowelAtChar)
{
String pure = "";
for (String word : line.split("\\s"))
{
// This regex is also sensitive to word length ie not being 5 like all test data
if (word.matches("^.{" + (word.length() - maxVowelAtChar + 1) + "}[^aeiouAEIOU]*$"))
pure += word + " ";
}
return pure.trim();
}
Output:
1: ALONE AMEND DATES DAWNS DEALS LEMON LENDS
2: AMEND DATES DAWNS DEALS LEMON LENDS
3: AMEND DAWNS DEALS LENDS
4: DAWNS LENDS
5:
Этот код был упрощен для иллюстрации сути решения. «Реальный» код будет использовать StringBuffer вместо String += String
.
То, что делает эту работу, это динамическое регулярное выражение, переданное в matches
, что означает «должен заканчиваться n не гласными»