Если я правильно вас понимаю, найденная строка всегда может быть подстрокой запроса?
Используйте contains()
, чтобы найти подстроку, и, если она найдена, сохраните ее, если она самая длинная.
public static void main(String[] args)
{
String[] names = {"Checking", "Savings", "DEMAT", "DEMAT Savings", "Interest Checking"};
String input = "Employee Interest Checking";
int min = Integer.MIN_VALUE;
String maxMatch = null;
for (String name : names)
{
boolean has = input.contains(name);
if (has && min < name.length())
{
min = name.length();
maxMatch = name;
}
}
if (null != maxMatch)
{
System.out.println("Maximum match for " + input + " found at " + maxMatch);
}
}
и так же, как сказал user988052; если вы упорядочите массив правильно, вы можете остановиться на первом совпадении, чтобы вам больше не пришлось искать, и вы можете исключить min
.
Упорядочение массива по убыванию по длине:
Arrays.sort(names, new Comparator<String>()
{
public int compare(String o1, String o2)
{
int d = o2.length() - o1.length();
return d != 0? d : ((Comparable<String>)o1).compareTo(o2);
}
});