Я использую этот код из ранее задаваемых вопросов . В этом случае я специально спрашиваю, как я могу удовлетворить условие перед назначением переменных. Я думаю, что это связано с манипулированием начальными точками итераторов i и j. Однако при различных попытках в результате пропускалось слишком много значений, которые следовало добавить в список.
Я хочу сделать это, потому что чувствую, что присвоение значений каждые l oop только для игнорирования большинства из них не очень эффективно.
public class Main
{
public static void main(String[] args)
{
String inputedWord = "ABIGWORD"; //the word being split
int min = 3; //the minimum size of substring to print
int max = 5; //the max size of substring to print
for (String str : breakStringIntoAllPossibleSubstrings(inputedWord, min, max))
{
System.out.print("\n" + str);
}
}
}
public static List<String> breakStringIntoAllPossibleSubstrings(String str, int min, int max)
{
List<String> listOfSubstrings = new ArrayList<>();
String sub;
int subLength;
for(int i=0; i<=str.length()-min; i++)
{
for(int j=str.length(); j>=i+min; j--)
{
sub = str.substring(i, j); //Is there a way to only assign these values
subLength = sub.length(); //if they satisfy the condition below?
if (subLength >= min && subLength <= max)
{
listOfSubstrings.add(sub);
}
}
}
//This line of code below can easily be commented out if I want the list to be returned in order by letter instead of size
Collections.sort(listOfSubstrings, (item1, item2) -> item2.length() - item1.length());
return listOfSubstrings;
}
ВЫХОД: (Это правильный и заданный вывод)
ABIGW
BIGWO
IGWOR
GWORD
ABIG
BIGW
IGWO
GWOR
WORD
ABI
BIG
IGW
GWO
WOR
ORD