按顺序排列子串列表它们以原始形式出现

时间:2014-07-11 00:36:56

标签: java substring comparator

我使用了一个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中的那个,它们随机出现在数组中。

2 个答案:

答案 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)

您似乎不需要比较器:只需打印所有子字符串