如何使用 Java 中给定的字符串值从数组列表中找到最长的前缀?
How to find longest prefix from array list using given string value in Java?
String[] num = { "1201", "12018", "1201800","12018000" };
String prefix="120180000175135";
我有两个变量,一个是字符串数组,另一个是字符串。
现在我想使用前缀从 String 数组中获取最长的值。请建议我如何在 Java.
中进行操作
另请查看我的解决方案,但它在上述情况下不起作用。
private static Item binarySearch(Item[] a, String key) {
int low = 0;
System.out.println("a.length" + a.length);
int high = a.length - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
int len = Math.min(key.length(), a[mid].key.length());
String midVal = a[mid].key.substring(0, len);
String cmpKey = key.substring(0, len);
if (midVal.compareTo(cmpKey) > 0)
low = mid + 1;
else if (midVal.compareTo(cmpKey) < 0)
high = mid - 1;
else
return a[mid];
}
return null;
}
假设您的数字数组按长度升序排序,您可以向后迭代并使用 String#startsWith
,打印第一个匹配项:
String[] num = { "1201", "12018", "1201800","12018000" };
String prefix = "120180000175135";
for (int i=num.length-1; i >= 0; i--) {
if (prefix.startsWith(num[i])) {
System.out.println("Longest match is: " + num[i]);
break;
}
}
如果数字数组 未 已经排序,那么您可以进行排序,或者您必须迭代整个未排序的数组并跟踪长度每场比赛。
或使用流:
String[] num = { "1201", "12018", "1201800","12018000" };
String prefix = "120180000175135";
Optional<String> match = Arrays.asList(num).stream()
.sorted(Comparator.comparingInt(String::length).reversed())
.filter(prefix::startsWith)
.findFirst();
System.out.println("Longest match is: " + match.orElse("no match found"));
String[] num = { "1201", "12018", "1201800","12018000" };
String prefix="120180000175135";
我有两个变量,一个是字符串数组,另一个是字符串。 现在我想使用前缀从 String 数组中获取最长的值。请建议我如何在 Java.
中进行操作另请查看我的解决方案,但它在上述情况下不起作用。
private static Item binarySearch(Item[] a, String key) {
int low = 0;
System.out.println("a.length" + a.length);
int high = a.length - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
int len = Math.min(key.length(), a[mid].key.length());
String midVal = a[mid].key.substring(0, len);
String cmpKey = key.substring(0, len);
if (midVal.compareTo(cmpKey) > 0)
low = mid + 1;
else if (midVal.compareTo(cmpKey) < 0)
high = mid - 1;
else
return a[mid];
}
return null;
}
假设您的数字数组按长度升序排序,您可以向后迭代并使用 String#startsWith
,打印第一个匹配项:
String[] num = { "1201", "12018", "1201800","12018000" };
String prefix = "120180000175135";
for (int i=num.length-1; i >= 0; i--) {
if (prefix.startsWith(num[i])) {
System.out.println("Longest match is: " + num[i]);
break;
}
}
如果数字数组 未 已经排序,那么您可以进行排序,或者您必须迭代整个未排序的数组并跟踪长度每场比赛。
或使用流:
String[] num = { "1201", "12018", "1201800","12018000" };
String prefix = "120180000175135";
Optional<String> match = Arrays.asList(num).stream()
.sorted(Comparator.comparingInt(String::length).reversed())
.filter(prefix::startsWith)
.findFirst();
System.out.println("Longest match is: " + match.orElse("no match found"));