18. marts 2008 - 11:52Der er
26 kommentarer og 1 løsning
Vedr. opgave i javabog.dk
Hej
Sidder og roder med javabog.dk opgave 3.4.6.4
http://www.javabog.dk/OOP/kapitel3.jsp Opgaven: Skriv et program, der fjerner den første forekomst af ordet "måske" fra en tekst. Ændr derefter programmet, så det fjerner alle forekomster af ordet (brug en løkke).
Og nu sidder jeg fast, har en rimelig ide om hvordan det skal laves men ved ikke hvordan jeg erstatter noget på en given plads i en streng? Sådan ser det ud det som jeg har lavet indtil nu: package opg3464;
public class Opg3464 {
public static void main(String[] args) { // Skriv et program, der fjerner den første forekomst af ordet "måske" fra en tekst. // Ændr derefter programmet, så det fjerner alle forekomster af ordet (brug en løkke).
String s="Hej alle, måske kommer der måske en med os som der måske kan gå må ske"; System.out.println(s); int i=0; i=s.indexOf("måske"); System.out.println("Første måske står på plads "+i); s2 = s.replace (,); }
String s="Hej alle, måske kommer der måske en med os som der måske kan gå må ske"; System.out.println(s); s = s.replaceFirst("måske",""); System.out.println(s); s = s.replaceAll("måske",""); System.out.println(s);
replaceFirst og replaceAll arbejder med regulære udtryk - jeg er sikker på at opgaven i javabog ikke tænker på at du skal bruge dem. Men hvilken java-version bruger du ?
public static void main(String[] args) { // Skriv et program, der fjerner den første forekomst af ordet "måske" fra en tekst. // Ændr derefter programmet, så det fjerner alle forekomster af ordet (brug en løkke).
String s="Hej alle, måske kommer der måske en med os som der måske kan gå må ske"; String s1; System.out.println(s); s=s.replaceFirst("måske","");
System.out.println(s);
}
}
Tak for hjælpen.
Erik > Nu du siger det ikke er den funktion javabog.dk vil have jeg skal bruge har du en ide til hvordan det så skal se ud?
Nej den er jeg osse med på, men jeg forstår stadig ikke hvordan jeg ellers skal lave det kan du give mig en ide. Den ide jeg havde var at lade den replace fra pladsen hvor måske kommer og så til slut af ordet måske med ingenting. Så ville det virke men kan ikk finde ud af hvordan jeg får den til at gøre det.
package opg3464;
public class Opg3464 {
public static void main(String[] args) { // Skriv et program, der fjerner den første forekomst af ordet "måske" fra en tekst. // Ændr derefter programmet, så det fjerner alle forekomster af ordet (brug en løkke).
String s="Hej alle, måske kommer der måske en med os som der måske kan gå må ske"; System.out.println(s); int i=0; i=s.indexOf("måske"); System.out.println("Første måske står på plads "+i); s2 = s.replace (,); }
Hvis "måske" står på plads 11 (har ikke talt efter), så laver du en substring op til 10, og en substring fra 16 til slutningen af strengen, og dem sætter du sammen. Vupti, så er "måske" måske forsvundet.
følgende kode er måske meget forkert.. men jeg kan ikke teste for hurtigt at rette til;) muligvis skal der rykkes lidt på index så den rammer korrekt osv. men i hvertfald.. du kan arbejde videre med det her..
see hvad output er og tilpas.. hvis den altså ikke smider en exception hehe:D
public class Opg3464 {
public static void main(String[] args) { // Skriv et program, der fjerner den første forekomst af ordet "måske" fra en tekst. // Ændr derefter programmet, så det fjerner alle forekomster af ordet (brug en løkke).
String line = "Hej alle, måske kommer der måske en med os som der måske kan gå må ske"; System.out.println(line); String replaceWord = "måske"; int replaceLength = replaceWord.length() - 1; int index = line.indexOf(replaceWord); while(index > -1){ if(index == 0){ line = line.substring(replaceLength, line.length()-1); }else{ line = line.substring(0, index) + line.substring(index + replaceLength, line.length()-1); } index = line.indexOf(replaceWord); } }
String s2; String s3; System.out.println(s1); int i = 0;
i=s1.indexOf(" måske"); System.out.println("Første måske står på plads "+i); s2=s1.substring(0,i); s3=s1.substring(i+6); System.out.println(s2+s3); } }
/** * @author Claus Machholdt * */ public class Opg3464b { public static void main(String[] args) { String s1="Hej alle, måske kommer der Måske en med os som der måske kan gå må ske"; String s2; String s3; System.out.println(s1); int i = 1; while (i>0) { i=s1.indexOf(" måske"); System.out.println("Første måske står på plads "+i); s2=s1.substring(0,i); s3=s1.substring(i+6); s1=s2+s3; System.out.println(s1); } }
}
Har lavet en while løkke så jeg får fjernet alle forekomster af ordet måske. Og det virker osse men den kommer med en fejlmeddelelse:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.substring(String.java:1768) at opg3464b.Opg3464b.main(Opg3464b.java:23)
while (true) { i=s1.indexOf(" måske"); if(i == -1) break; System.out.println("Første måske står på plads "+i); s2=s1.substring(0,i); s3=s1.substring(i+5); s1=s2+s3; System.out.println(s1); }
OK. Men jeg vender nok tilbage på et tidspunkt med et nyt spørgsmål. Synes det kan være lidt svært at forstå, og samtidig skal man vænne sig til at tænke mere "programmeringssprog".
...og det sjove er så, at når du så først for lært alt det der med if-er og while-r, så kommer vi og siger, at noget af det du programmerer meget nemmere kan laves med regulære udtryk - hvilket jo er en slags programmering, på en anden måde. Eller noget af det trivielle kode, man ellers ville sidde og lave, kan fremstilles automatisk.
Men det er nok stadig en god idé at starte på den måde.
Jeg er selv igang med javabog.dk og er kommet frem til en anden løsning hvor man indtaster det ord man ønsker fjernet: public class opg_3_4_6_4 {
public static void main(String[] arg) { java.util.Scanner tastatur = new java.util.Scanner(System.in);
String tekst = "Dette er måske den første lange sætning med mange ord i, måske"; String ord,start,slut; int s2,s3;
System.out.println(tekst); System.out.println(); System.out.println("Indtast det ord som skal fjernes"); ord = tastatur.next();
s2 = tekst.indexOf(ord); s3 = ord.length(); while (s2!=-1) { start = tekst.substring(0,s2-1); slut = tekst.substring(s2+s3); tekst = start+slut;
System.out.println("Det indtastede ord: "+ord+ " står på plads " +s2);
s2 = tekst.indexOf(ord);
} System.out.println("Sætningen uden ordet:"); System.out.println(tekst); } }
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.