gpt4 book ai didi

java - 按子字符串在原始内容中出现的顺序对子字符串列表进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 14:43:41 24 4
gpt4 key购买 nike

我使用了 oomparator 按子字符串的长度对数组进行排序。它工作得很好,但是有没有办法对数组中相同长度的子字符串进行排序,最好按照它们在原始字符串中出现的顺序?例如,如果我对蕉的子串进行排序,我会得到:香蕉,anana,banan,bana,nana,anan...按此顺序,想要得到:banana,banan,anana,bana,anan,nana...这是它们最初在香蕉中出现的方式。

数组如何填充:

    public static String longestRepeated(String line) {
HashMap<String, Integer> subArray = new HashMap<String, Integer>();
String answer = "";
for (int i = 0; i < line.length(); i++) {
for(int j = 1 ; j <= line.length() - i ; j++) {
if (!subArray.containsKey(line.substring(i, i + j))) {
subArray.put(line.substring(i, i + j), i);
}
}
}
answer = subArray.keySet().toString();
answer = answer.replaceAll("\\[", "");
answer = answer.replaceAll("\\]", "");
String[] subs = answer.split(",");
LongestRepeatedSubstring lrs = new LongestRepeatedSubstring(line);
Arrays.sort(subs, lrs);
for (int i = 0 ; i < subs.length; i++) {
subs[i] = subs[i].trim();
}

比较器:

    int lineLength;

public int compare(String str1, String str2) {
int dist1 = Math.abs(str1.length() - lineLength);
int dist2 = Math.abs(str2.length() - lineLength);
return dist1 - dist2;
}
public LongestRepeatedSubstring(String line) {
super();
this.lineLength = line.length();
}

然后我使用一些循环来查找第一个重复且不在同一索引处的循环。当数组中存在多个相同长度的重复子字符串时,就会出现此问题。我需要第一个出现在字符串中的那个,它们随机出现在数组中。

最佳答案

我真的不明白你在问什么,但我认为你想说的是,是否有办法在比较器内再次进行比较。正确的?如果是这种情况,这里是一个例子:

public static Comparator<String> CompareBySomeRestrictionAndOtherRestriction = new Comparator<String>(){
public int compare(String s, String p){
if(){//first condition, for example some strings are the same size
//then use some other criteria, for example alphabetical order
}else{

}
}

}

您只需按照自己的方式管理比较即可实现您想要的目标。

关于java - 按子字符串在原始内容中出现的顺序对子字符串列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24688452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com