我使用了一个oomparator来按照子串的长度对数组进行排序。它运行良好,但是有没有办法在数组中对相同长度的子串进行排序,理想情况是它们在原始字符串中出现的顺序?例如,如果我对香蕉的子串进行排序,我会得到: 香蕉,anana,banan,bana,nana,anan ...按此顺序,并希望得到:香蕉,巴南,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();
}
然后我使用一些循环来找到第一个重复但不在同一索引的循环。如果在相同长度的数组中存在多个重复的子串,则会出现此问题。我需要首先出现在String中的那个,它们随机出现在数组中。
答案 0 :(得分:0)
我真的没有得到你的要求,但我认为你想说的是,如果有一种方法可以再次在比较器内进行训练。对?如果是这种情况,这是一个例子:
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{
}
}
}
你必须按照自己的方式管理比较,以达到你想要的目的。
答案 1 :(得分:0)
您似乎不需要比较器:只需打印所有子字符串