04. oktober 2007 - 12:37Der er
11 kommentarer og 2 løsninger
Splitte string
Hejsa! Er temmelig grøn i faget, så sidder med en lille hovedpine. Skal lave en applikation som tager imod en streng, og splitter den op så hvert bogstav/tal/mellemrum kommer på hver sin linie. Vi har fået den til at tage det første ord, men så ender den i et loop. Nogen der har et forslag, så den også får mellemrum med, samt stopper når den har printet hele strengen.
Første skridt er (som sedvanlig) at hitte ud af PRÆCIS hvad der skal gøres. Du skriver: "splitter den op så hvert bogstav/tal/mellemrum kommer på hver sin linie." og derefter: "Vi har fået den til at tage det første ord"
Det passer ikke sammen. skal strengen deles op i bogstaver eller skal den deles i ord ?
Bogstaver :) Vi har fået den til at tage første ord i f.eks en sætning. Lad os sige der skrives "Hello world". Så skal den smide det ud på følgende måde: Hele strengen: Hello world H e l l o
w o r l d
Lige nu smider den kun følgende ud: Hele strengen: Hello H e l l o
Linien System.out.println("Hele strengen: " + strengA); ku tyde på i havde ønsket at have hele den indtastede streng i 'strengA' på det tidspunkt. Det skal så specificeres i scan's delimiter: scan.useDelimiter("[\r\n]"); // når bruger trykker retur og når nu strengA indeholder hele linien er der ingen grund til at loope på scan
Scanner scan = new Scanner (System.in); scan.useDelimiter("[\r\n]"); // TILFØJET linie
Ups. den der test (scan.hasNext()) duer ikke, for med System.in som souce vil scan jo vente til evig tid på en næste line før det bliver sandt. det skal nok hellere være:
Jeg ved ik helt hvor jeg stod af, men det er jeg vist nu (hmm, java kan vist være en stærk kop at starte på). Beklager at jeg er lige en tand bagud her, men kan jeg få dig til at skrive hvorhenne den mangler. Har forsøgt at smide delimiter ind på hver scan for sig selv, samt på dem alle, og den deler dem kun op pr. ord, ikke bogstav.
if (strengA.length() > 0) { System.out.println("Hele strengen: " + strengA);
stringScan = new Scanner (strengA); stringScan.useDelimiter(""); // ÆNDRET linie
while (stringScan.hasNext()) // ÆNDRET indrykning System.out.println(stringScan.next()); // ÆNDRET indrykning
} } }
Programmering er ligesom videnskab. Det er EKSAKT. Ovenfor havde du udskiftet linien stringScan.useDelimiter(""); // korrekt med scan.useDelimiter("[\r\n]"); // forkert scannner og forkert parameter og jeg vil vædde på at du ikke kan fortælle mig hvorfor du gjorde det. Det skulle ikke undre mig hvis du sågar har glemt at du ændrede den linie :-)
chancen for at få noget godt ud af at 'prøve sig frem' er mikroskopisk når du programmerer. Og det er desværre ikke sådan mennesker normalt tænker (eller gudskelow, for hvis de gjorde ville vi alle være lige så handlingslammede som du føler dig nu). Det er så noget du skal have lært, at tanke exakt istedet for bare at prøve dit og dat. Når indskydelsen kommer så STOP. tænk, læs dokumentation, og når du så har en ide om hvad du vil gøre og hvad effekt det vil have så prøv det. men vær klar til at ændre tilbage igen. Det er at eksperimentere, og det er helt fint for det lærer man af.
Så kører den. Men for djævlens jeg havde stirret mig blind på de 2 scannere og tilhørende delimiters. Og giver dig ret i at man ikke bare prøver sig frem :) Sidder og nærlæser Java Software Solutions igen. Og den bog er bestemt ikke velskrevet :( bruger javabog.dk ved siden af som er lidt nemmere at benytte. Bare lidt skidt at undervisningen kører efter Java Software Solutions, og javabog.dk gennemgår emnerne på en helt anden måde.
Men tusind tak for hjælpen. Gav mig et bedre indblik i delimiter (som er et mindre hængeparti). Smid endelig et svar. Point for tålmodigheden og hjælpen er velfortjent :)
Er der noget i opgave formuleringen som forbyder den primitive løsning ?
public class S { public static void main(String[] args) { Scanner scn = new Scanner(System.in); String line = scn.nextLine(); for(int i = 0; i < line.length(); i++) { System.out.println(line.charAt(i)); } } }
arne_v bestemt ikke :) virker også fint. Så lærte jeg endnu mere. Havde startet med for, men det gik lidt i bananas for os. Smid endelig også et svar. Afsætter flere point og deler lige op. Tusind tak for hjælpen begge 2 :)
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.