((((((((((Please include comments and javadoc comments!! ))))))))) import java.u
ID: 3907385 • Letter: #
Question
((((((((((Please include comments and javadoc comments!! )))))))))
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class DirectorySortDemo
{
public static void main(String[] args)
{
String[] dirNames = {"dir12", "dir5", "dir9", "dir1", "dir4",
"lab10", "lab2", "lab7", "lab17", "lab8",
"quiz8", "quiz10", "quiz11", "quiz12",
"dir11", "dir8", "dir7", "dir15", "dir3"};
ArrayList<String> directories = new ArrayList<>(Arrays.asList(dirNames));
System.out.println("Unsorted List:");
System.out.println(directories);
Collections.sort(directories, new DirectoryComparator());
System.out.println();
System.out.println("Sorted List:");
System.out.println(directories);
}
}
Explanation / Answer
import java.util.Comparator; public class DirectoryComparator implements Comparator { @Override public int compare(String s1, String s2) { String w1, w2; int n1, n2; int index = 0; // find index of first non-digit character starting from the end of the first string for(int i = s1.length()-1; i >= 0; --i) { if(!Character.isDigit(s1.charAt(i))) { index = i+1; break; } } // separate number and string n1 = Integer.parseInt(s1.substring(index)); w1 = s1.substring(0, index); index = 0; // find index of first non-digit character starting from the end of the second string for(int i = s2.length()-1; i >= 0; --i) { if(!Character.isDigit(s2.charAt(i))) { index = i+1; break; } } // separate number and string n2 = Integer.parseInt(s2.substring(index)); w2 = s2.substring(0, index); // compare the strings and numbers here and return comparision result int cmp = w1.compareTo(w2); if(cmp == 0) { return Integer.compare(n1, n2); } else { return cmp; } } }Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.