Avatar billede quiw Nybegynder
08. juni 2008 - 16:46 Der er 18 kommentarer og
1 løsning

If sætning, med string og char.

Hejsa eksperter.
Hvordan foretager jeg mig en if sætning, med både string og char?
Jeg har følgende kode, som finder et mellemrum i en sætning (Jeg ved godt at Tokenizer kan bruges, men det opfylder ikke mit mål, da den først skal lede efter mellemrum, når den har passeret de første 20 bogstaver):

while(i!=tekst.length()){
    if(i>20){
      if(tekst[i]==' '){
          //Jeg fundet første mellemrumet, efter 20 bogstaver.
      }
    }
    i++:
}

- Og ekstra spørgsmål, hvordan deler jeg en streng i 2, på et givet punkt?

F.eks:
"Denne streng skal deles."
Og vil gerne dele den på f.eks. det 12. bogstav, således:
str1 :"Denne streng"
str2 :" skal deles."

- På forhånd mange tak :)
Avatar billede arne_v Ekspert
08. juni 2008 - 16:49 #1
if(tekst.charAt(i)==' '){
Avatar billede arne_v Ekspert
08. juni 2008 - 16:50 #2
String str1 = s.substring(0, 12);
String str2 = s.substring(12);
Avatar billede arne_v Ekspert
08. juni 2008 - 16:51 #3
Jeg vil iøvrigt ikke udelukke at der findes bedre løsninger på det grundliggende problem.
Avatar billede quiw Nybegynder
08. juni 2008 - 16:59 #4
Hm, altså, umiddelbart er mit overordnede problem, at lave en talebobbel, som former sig alt efter den givne teksts størrelse..
Så for at få en pæn form, vil jeg lade den dele ordene ved mellemrum når den overskrider 20 bogstaver, og i stedet lave den næste sætning på en ny linje .. Meget simpelt, men forholdsvist svært at få til at virke i praksis ..
Avatar billede arne_v Ekspert
08. juni 2008 - 17:15 #5
Det tror jeg at jeg kan lave et lille eksempel til.
Avatar billede quiw Nybegynder
08. juni 2008 - 17:18 #6
Altså, mit fungerer udemærket indtil videre, men hvis du har en lettere løsning, vil jeg faktisk gerne se den :)
Avatar billede arne_v Ekspert
08. juni 2008 - 17:27 #7
Prøv og se om du kan finde lidt inspiration i dette:

package june;

public class FormatWidth {
    public static void printFormatWidth(String s, int w) {
        String tmp = s;
        while(tmp.length() > 0) {
            if(tmp.length() <= w) {
                System.out.println(tmp);
                tmp = "";
            } else {
                int ix = w - 1;
                while(ix >= 0 && tmp.charAt(ix) != ' ') ix--;
                System.out.println(tmp.substring(0, ix));
                tmp = tmp.substring(ix + 1);
            }
        }
    }
    public static void main(String[] args) {
        String s = "Dette er en lille test, hvor vi splitter en sætning.";
        printFormatWidth(s, 15);
        printFormatWidth(s, 20);
        printFormatWidth(s, 25);
        printFormatWidth(s, 30);
    }
}
Avatar billede arne_v Ekspert
08. juni 2008 - 17:39 #8
Bedre i din kontekst måske:

package june;

public class FormatWidth2 {
    public static String printFormatWidth(String s, int w) {
        StringBuilder res = new StringBuilder();
        String tmp = s;
        while(tmp.length() > 0) {
            if(tmp.length() <= w) {
                res.append(tmp);
                tmp = "";
            } else {
                int ix = w - 1;
                while(ix >= 0 && tmp.charAt(ix) != ' ') ix--;
                res.append(tmp.substring(0, ix));
                res.append("\r\n");
                tmp = tmp.substring(ix + 1);
            }
        }
        return res.toString();
    }
    public static void main(String[] args) {
        String s = "Dette er en lille test, hvor vi splitter en sætning.";
        System.out.println(printFormatWidth(s, 15));
        System.out.println(printFormatWidth(s, 20));
        System.out.println(printFormatWidth(s, 25));
        System.out.println(printFormatWidth(s, 30));
    }
}
Avatar billede quiw Nybegynder
08. juni 2008 - 17:48 #9
Det virker egentlig fremragende, men kan du give en kort beskrivelse af, hvorledes din funktion virker? :)
Avatar billede arne_v Ekspert
08. juni 2008 - 18:01 #10
Jeg har forsøgt at kode det ligesom man ville gøre det med papir og blyent.

så længe vi ikke er færdige {
    hvis resten kan være i max bredden {
        bare brug det
    } ellers {
        placer en pege pind ved max bredden
        flyt pege pind til venstre indtil vi finder et mellemrum
        brug det før pege pinden
        process resten d.v.s. det efter pege pinden
    }
}
Avatar billede quiw Nybegynder
08. juni 2008 - 21:07 #11
Nu har jeg kigget lidt på det, og det virker meget fornuftigt, men problemet er bare, at det gerne skulle deles op i flere strenge, da jeg benytter drawString, som ikke understøtter \r\n ..
Avatar billede arne_v Ekspert
08. juni 2008 - 21:51 #12
3. gang er lukkens gang:

package june;

import java.util.ArrayList;
import java.util.List;

public class FormatWidth3 {
    public static List<String> printFormatWidth(String s, int w) {
        List<String> res = new ArrayList<String>();
        String tmp = s;
        while(tmp.length() > 0) {
            if(tmp.length() <= w) {
                res.add(tmp);
                tmp = "";
            } else {
                int ix = w - 1;
                while(ix >= 0 && tmp.charAt(ix) != ' ') ix--;
                res.add(tmp.substring(0, ix));
                tmp = tmp.substring(ix + 1);
            }
        }
        return res;
    }
    public static void main(String[] args) {
        String s = "Dette er en lille test, hvor vi splitter en sætning.";
        List<String> lst15 = printFormatWidth(s, 15);
        for(String line : lst15) {
            System.out.println(line);
        }
        List<String> lst20 = printFormatWidth(s, 20);
        for(String line : lst20) {
            System.out.println(line);
        }
        List<String> lst25 = printFormatWidth(s, 25);
        for(String line : lst25) {
            System.out.println(line);
        }
        List<String> lst30 = printFormatWidth(s, 30);
        for(String line : lst30) {
            System.out.println(line);
        }
    }
}
Avatar billede quiw Nybegynder
09. juni 2008 - 09:24 #13
Men det virker jo ganske glimrende, mange tak, ligger du lige et svar? :)
Avatar billede arne_v Ekspert
09. juni 2008 - 14:32 #14
svar
Avatar billede quiw Nybegynder
18. juni 2008 - 00:27 #15
Hm, har faktisk bemærket, at hvis stringen slet ikke indeholder et mellemrum, crasher appletten .. Kan det på nogen måde fikses? Må lige nævne, at jeg er lidt grøn til java ..
Avatar billede arne_v Ekspert
18. juni 2008 - 03:20 #16
Alt er muligt !

Men det afhænger jo lidt af hvad man vil.

Her er et udkast:

package june;

import java.util.ArrayList;
import java.util.List;

public class FormatWidth4 {
    public static List<String> printFormatWidth(String s, int w) {
        List<String> res = new ArrayList<String>();
        String tmp = s;
        while(tmp.length() > 0) {
            if(tmp.length() <= w) {
                res.add(tmp);
                tmp = "";
            } else {
                int ix = w - 1;
                while(ix >= 0 && tmp.charAt(ix) != ' ') ix--;
                if(ix > 0) {
                    res.add(tmp.substring(0, ix));
                    tmp = tmp.substring(ix + 1);
                } else {
                    res.add(tmp.substring(0, w - 1) + "-");
                    tmp = tmp.substring(w - 1);
                }
            }
        }
        return res;
    }
    public static void main(String[] args) {
        String s = "Dette er en lille test, hvor vi splitter en sætning.";
        List<String> lst15 = printFormatWidth(s, 15);
        for(String line : lst15) {
            System.out.println(line);
        }
        List<String> lst20 = printFormatWidth(s, 20);
        for(String line : lst20) {
            System.out.println(line);
        }
        List<String> lst25 = printFormatWidth(s, 25);
        for(String line : lst25) {
            System.out.println(line);
        }
        List<String> lst30 = printFormatWidth(s, 30);
        for(String line : lst30) {
            System.out.println(line);
        }
        List<String> lst = printFormatWidth("12345678901234567890", 15);
        for(String line : lst) {
            System.out.println(line);
        }
    }
}
Avatar billede quiw Nybegynder
18. juni 2008 - 09:50 #17
Se dét, fungerer jo super! Vil du have ekstra point for det?
Avatar billede arne_v Ekspert
18. juni 2008 - 15:33 #18
Ikke noedvendigt.
Avatar billede quiw Nybegynder
18. juni 2008 - 16:19 #19
Okay, mange tak så :)
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