21. marts 2005 - 15:12Der er
26 kommentarer og 1 løsning
StringBuffer arrays
I følgende kode, hvis jeg støder på et tal, som er forskellig fra det forrige tal, ex. "95410, 55789", så skal 55 ned på en ny linie, og dens efterfølgende tal. En anden lille ting. En modifikation i koden så den selv kan se efter om det er de første 2 tal den skal tage eller 3 tal. ex. "95258,95147,95369,95123" //Her kunne resultat være : "95,258,147,369,123" det andet ex. "155987,155654,155321,155753" // Her kunne resultat være :"155,987,654,321,753"
if ((a[i] / 1000) != last) {
sb.append(a[i] / 1000); sb.append(","); last = a[i] / 1000;
Hvis det her kunne laves vha stringbuffer, ville det være bedre... kan man ud fra det jeg har skrevet foroven af eks, lave det således at det også kan tage i mod 3 tal ???
si senor...jeg kan godt forstå dig, men jeg har set koder kun på et par linier vha stringbuffere lave det samme som din stykke kode. Det kunne jo være smart med en funktion, som scanner igennem nogle tal og kan se at hvis de alle starter med ex 155, så print 155 ud kun en gang, mens de andre tal printes ud efterfølgende.. så scanner den videre, opdager igen en talrække som starter med 74, og printer 74 for sig selv og de resterende tal derefter....
Jeg kan måske godt hvis jeg tænker mig komme med et bedre bud hehe, men bliver stadig på et par linjer.. det undre mig over ingen af de andre GODE java programmere ikke har svaret her for de har da set spørgsmålet! og det burde ik være et problem for dem:)
public static String format(String input, int length) { StringTokenizer st = new StringTokenizer(input, ","); StringBuffer sb = new StringBuffer(); String current = new String(); String next = st.nextToken(); while (st.hasMoreTokens()) { current = next; next = st.nextToken(); sb.append(current); if (current.regionMatches(0, next, 0, length)) { sb.append(","); } else{ sb.append("\n"); } } sb.append(next); return sb.toString(); }
tja drenge.. hva skal jeg sige.. der bliver hoppet rundt i både Strings, StringTokenizer og String arrays... meget forvirrende....jeg må ærlig tilstå at jeg har fået banket for megen af arne's string arrays i hovedet, og vil hellere hælde til sådan en løsning. Men for jeres indsats vil jeg gerne gi jer points...så må jeg finde et andet sted og poste og se om de kan hjælpe mig ud af det her....så begge 2 kast svar !
Hvad er det der er forvirrende? Strings er der fordi du har postet det som strenge i dine eksempler. Når man så har med strenge at gøre og vil dele dem op i f.eks. ord så benyttes en tokenizer. Hvor kom string arrays ind i billedet henne? Hvis du vil, kan jeg godt kommentere koden hvis det er der sko'en trykker - men det er op til dig...
Krydsforhøring hva.... hehe.. altså med dit eks, hvor den tjekker de første 2 tal, så vil den jo gi som output det første svar du skriver : 1500,1501,1532 7850
Der skal stadig laves modifikationer i eks, som jeg nu sidder med
Så har jeg fået koden til at virke efter hensigten... Kaster du et svar snoop one...
import java.util.StringTokenizer;
public class bimmer {
public static String format(String input, int length) { StringTokenizer st = new StringTokenizer(input, ","); StringBuffer sb = new StringBuffer(); String current = new String(); String next = st.nextToken(); while (st.hasMoreTokens()) { current = next; next = st.nextToken(); sb.append(current);
/* (0) start af String next,(next) Strings navn, * (0) start af andet String,(length) længden på param 0 og 2. */
Jep så den godt, var også en god løsning... men sådan som jeg forstod det på touels post, citat: "... første 2 tal den skal tage..." det forstår jeg som de 2 første cifre i tallet... dvs. at i dit eksempel så vil følgende tal: 5500,5520,55023,11052
give: 5500,5520 55023 11052
hvor i det ovenstående vil outputtet være: 5500,5520,55023 11052
men om, at jeg har forstået hvad der egentlig var ment med dette spg ved jeg faktisk ikke :-)
Umiddelbart synes jeg at resten+3 cifre virke rmere logisk end 2+resten cifre, men man ved aldrig.
Det er iøvrigt nemt at rette min kode til så den bruger det andet princip.
Eksempel:
package march;
public class TryAgain { public static String arr2strLast3(int[] a) { StringBuffer sb = new StringBuffer(""); int last = -1; for (int i = 0; i < a.length; i++) { if (i > 0) { sb.append(","); } if ((a[i] / 1000) != last) { if(i > 0) { sb.append("\r\n"); } sb.append(a[i] / 1000); sb.append(","); last = a[i] / 1000; } sb.append(a[i] % 1000); } return sb.toString(); }
public static String arr2strFirst2(int[] a) { StringBuffer sb = new StringBuffer(""); int last = -1; for (int i = 0; i < a.length; i++) { if (i > 0) { sb.append(","); } int n = 10; while(a[i] / n >= 100) n *= 10; if ((a[i] / n) != last) { if(i > 0) { sb.append("\r\n"); } sb.append(a[i] / n); sb.append(","); last = a[i] / n; } sb.append(a[i] % n); } return sb.toString(); }
public static void main(String[] args) { int[] ia = { 5500, 5520, 55023, 11052 }; System.out.println(arr2strLast3(ia)); System.out.println(arr2strFirst2(ia)); } }
Synes godt om
Ny brugerNybegynder
Din løsning...
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.