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
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.