04. februar 2003 - 16:12Der er
6 kommentarer og 1 løsning
Sortering af tekster
HEJ HEJ ALLE Jeg har 4 Strings: "10a" "9" "11b" "10b" Disse 4 skal sorteres således at de kommer i nummerorden: "9" "10a" "10b" "11b". Er der nogen der har en god ide til hvorledes dette kan løses
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
public class SortEx { public static void main(String[] args) { String[] sa = { "10a", "9", "11b", "10b" }; Arrays.sort(sa, new CompEx()); for (int i = 0; i < sa.length; i++) { System.out.println(sa[i]); } } }
class CompEx implements Comparator { public int compare(Object o1, Object o2) { String s1 = (String)o1; int ix1 = 0; while(ix1 < s1.length() && Character.isDigit(s1.charAt(ix1))) ix1++; int i1 = Integer.parseInt(s1.substring(0, ix1)); String sufs1 = s1.substring(ix1); String s2 = (String)o2; int ix2 = 0; while(ix2 < s2.length() &&Character.isDigit(s1.charAt(ix2))) ix2++; int i2 = Integer.parseInt(s2.substring(0, ix2)); String sufs2 = s1.substring(ix2); if(i1 == i2) { return sufs1.compareTo(sufs2); } else { return (i1 - i2); } } public boolean equals(Object obj) { return super.equals(obj); }
// vi skal så læse den numeriske del af strengen og konvertere // den til en int int intFraStr( String val ) { int res=0, i=0, mx = val.length(); while ( i < mx && cifre.indexOf(val.charAt(0)) >= 0 ) { res = res*10 + cifre.indexOf(val.charAt(0)); } return res; }
// og en funktion der returnerer 'resten af strengen String strFraStr( String val ) { int i; for (i=0; i<val.length(); i++) { if ( cifre.indexOf(val.charAt(i)) < 0 ) break; } return val.substring(0,i); }
// nu kan du lave en 'sammenlign 2 værdier' funktion int compare( String val1, String val2 ) if ( intFraStr(val1) == intFraStr(val2) ) { if ( strFraStr(val1) == strFraStr(val2) ) return 0; if ( strFraStr(val1) > strFraStr(val2) ) return 1; return -1; } else { if ( intFraStr(val1) > intFraStr(val2) ) return 1; return -1; } }
og så ellers sortere med en bubblesort eller hvad du nu kender
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.