Avatar billede machholdt Nybegynder
18. marts 2008 - 11:52 Der 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 (,);
    }

}
Avatar billede kalp Novice
18. marts 2008 - 12:57 #1
replaceFirst("måske","");
replaceAll("måske","");
Avatar billede kalp Novice
18. marts 2008 - 12:58 #2
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);
Avatar billede machholdt Nybegynder
18. marts 2008 - 13:13 #3
Hmm. Det lyder simpelt nok. Men den kommer med en fejl når jeg forsøger med kommandoen.

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The method replaceFirst(String, String) is undefined for the type Opg3464

    at opg3464.Opg3464.main(Opg3464.java:15)

undrer mig osse over de ikke er kommet ind på replace first og replaceall inden man skal bruge dem.
Avatar billede erikjacobsen Ekspert
18. marts 2008 - 13:50 #4
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 ?
Avatar billede machholdt Nybegynder
18. marts 2008 - 14:13 #5
Hmm. I jbuilder er det Build: v20070614_1537

Java 6 update 3.
Avatar billede erikjacobsen Ekspert
18. marts 2008 - 14:42 #6
Ok - men husker du at anvende de to funktioner på en streng?
Avatar billede machholdt Nybegynder
18. marts 2008 - 15:08 #7
HEHE. Har løst den 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";
        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?
Avatar billede erikjacobsen Ekspert
18. marts 2008 - 15:10 #8
Der er mange måder ... måske noget med indexOf og substring.
Avatar billede machholdt Nybegynder
18. marts 2008 - 15:19 #9
OK. Ja det var jeg osse startet på men kunne sq ikk regne ud hvordan jeg skulle greje den.
Avatar billede kalp Novice
18. marts 2008 - 15:20 #10
disse funktioner er fra 1.4 af API'et.. jeg har ikke kigget i det nyeste API af java.

og bogen forventer nok ikke, at man finder de her metoder, men det man skal er, at udnytte API'et og derfor er det ikke forkert, at du benytter dem.
Avatar billede kalp Novice
18. marts 2008 - 15:21 #11
machholdt >>

String klassen og dens medlemmer. (1.4)
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html
Avatar billede machholdt Nybegynder
18. marts 2008 - 15:29 #12
Kalp > Tak for hjælpen.
Avatar billede erikjacobsen Ekspert
18. marts 2008 - 15:42 #13
Men man skal nu ikke bruge replaceFirst og replaceAll før man ved hvad regulære udtryk er.
Avatar billede machholdt Nybegynder
18. marts 2008 - 16:16 #14
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 (,);
    }

}
Avatar billede erikjacobsen Ekspert
18. marts 2008 - 16:29 #15
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.
Avatar billede kalp Novice
18. marts 2008 - 17:01 #16
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);
        }
    }

}
Avatar billede kalp Novice
18. marts 2008 - 17:03 #17
hvis det virker.. og når det virker..
så kan du erstatte den første "måske" ved at smide en "break" in efter else  i while løkken.

while(true){
if(index == 0){
              line = line.substring(replaceLength, line.length()-1);
          }else{
              line = line.substring(0, index) + line.substring(index + replaceLength, line.length()-1);
          }
        break;
}

f.eks sådan.

pænt og pænt.. nu skal vi ikke diskutere.
Avatar billede machholdt Nybegynder
18. marts 2008 - 17:20 #18
Hmm. OK. Kigger lige på det.-
Avatar billede arne_v Ekspert
19. marts 2008 - 04:12 #19
Udfra opgave teksten:
  Skriv et program, der fjerner den første forekomst af ordet "måske" fra en tekst.

Så synes jeg jo netop at replaceFirst er en rigtig god løsning !

.replaceFirst("\\bmåske\\b", "")

:-)
Avatar billede machholdt Nybegynder
19. marts 2008 - 20:14 #20
Det virker nu.

Med denne kode:

package opg3464;

public class Opg3464
{

    public static void main(String[] args)
    {
       
        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);
    }
}
Avatar billede machholdt Nybegynder
19. marts 2008 - 20:17 #21
Men lige et tillægsspørgsmål:

/**
*
*/
package opg3464b;

/**
* @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)

Hvordan retter jeg det?
Avatar billede kalp Novice
19. marts 2008 - 20:35 #22
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);
        }
Avatar billede machholdt Nybegynder
19. marts 2008 - 21:25 #23
Okay. Ja bortset fra du har rettet det til 5 så er den perfekt.
Mange tak for hjælpen.
Avatar billede kalp Novice
19. marts 2008 - 21:26 #24
jeg så ikke dit mellemrum før måske;o)
Avatar billede machholdt Nybegynder
19. marts 2008 - 21:29 #25
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".
Avatar billede erikjacobsen Ekspert
19. marts 2008 - 21:42 #26
...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.
Avatar billede PaddiPimp Nybegynder
21. august 2013 - 17:43 #27
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);
    }
}
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester