Avatar billede renebmadsen Nybegynder
01. juni 2007 - 12:34 Der er 13 kommentarer og
1 løsning

blade bogstaver i en tekst

hey hvordan blander man en bogstaverne i en tekst, det første og sidste bogstav skal bevares det er resten der skal blandes. feks
søren = sreøn osv, der skal tages højde for komma og punktum.
jeg ved ikke hvor lang teksten er.
teksten skal skrives til en ny string...
Avatar billede jakob_f Nybegynder
01. juni 2007 - 16:58 #1
Du kan benytte metoden "public String[] split(String regex)" på strings. Den returnere et String array indeholdende hvert enkelt ord i din tekst. Du kan nu, på hvert enkelt plads i arrayet, benytte metoden "public char[] toCharArray()" der splitter hver enkelt string op i et char Array.

Jeg antager nu at alle kommaer eller punktummer kommer direkte i forlængelsen af et ord. (f.eks. "hej med dig, jeg hedder jakob". Og ikke "hej med dig , jeg hedder jakob").

Hvis denne antagelse holder stik, ved du at det sidste element i dit char array muligvis indeholder et komma eller et punktum.
Vi ved altså at der ikke skal pilles ved det første element og det sidste, og muligvis heller ikke det næstsidste.

Du kan nu begynde at kopiere hvert enkelt elemtent i char arrayet over i et nyt char array. Benyt f.eks. nextInt() fra Random klassen til at beslutte hvilke pladser de enkelte karakterer skal have i det nye array, men husk ikke at rode rundt med det første, det sidste og evt. det næst sidste element.

Nu skal det hele bare samles igen. Det kan gøres ved at oprette en ny string, og concatinerer hvert enkelt element i hvert enkelt af de nye char arrays ved at benytte toString(). Og husk at sætte mellemrum ind mellem hvert char array.

Jeg håber dette kan bruges til noget ;-)
Avatar billede arne_v Ekspert
01. juni 2007 - 17:26 #2
noget a la:

    public static String shuffle(String s) {
        List<Character> lst = new ArrayList<Character>();
        for(int i = 1; i < s.length() - 1; i++) lst.add(s.charAt(i));
        Collections.shuffle(lst);
        StringBuffer sb = new StringBuffer();
        sb.append(s.charAt(0));
        for(int i = 0; i < lst.size(); i++) sb.append(lst.get(i));
        sb.append(s.charAt(s.length() - 1));
        return sb.toString();
    }
Avatar billede jakob_f Nybegynder
01. juni 2007 - 17:44 #3
Collections.shuffle() .. snedigt, den kendte jeg ikke ;-) Den er nok at foretrække frem for min ide om Random klassen..

Så vidt jeg kan se tager funktionen højde for det første og det sidste bogstav i s (argumentet), men ikke kommaer og punktummer samt at bevare start og slut bogstavet i det enkelte ord. Men den spiller vist tilsyneladende på hvert ord enkeltvis.

Men man skal vist lige være opmærksom på at bruge den på hvert enkelt ord (hvis jeg har forstået problemstillingen rigtigt) samt at holde styr på komaer og punktummer.
Avatar billede arne_v Ekspert
01. juni 2007 - 18:05 #4
Jeg har ingen anelse om hvad "der skal tages højde for komma og punktum" betyder.

Og der staar ikke noget i spm. om ord.

Shuffle bruger en Random, men man sparer lidt kode.
Avatar billede arne_v Ekspert
01. juni 2007 - 18:10 #5
Og hvis generics og char[] versus Character[] havde vaeret lidt mere "samarbejdsvillig"
havde vi sparet endnu mere kode, men alle min forsoeg med Arrays.asList og lst.toArray
faldt ikke heldige ud.
Avatar billede jakob_f Nybegynder
01. juni 2007 - 18:12 #6
Det er ikke godt at vide helt konkret hvad der er problemstillingen går ud på, jeg havde forsået, at det var en string der indeholder f.eks. en sætning, eller et helt afsnint af et eller andet, og at bogstaverne i hvert enkelt ord skal blandes, men at ordene, kommaer samt punktummer skal bibeholde deres posision i "teksten".

Men hvis jeg så har forsået problemet korrekt er det bare at hugge den oprindelige string op vha. f.eks. split() og så bruge arne_v's metode på hvert enkelt ord.
Avatar billede renebmadsen Nybegynder
02. juni 2007 - 09:28 #7
jacob f du har forstået problem stillingen helt rigtigt.
måske du lige smider et kode eksempel til mig.
Avatar billede arne_v Ekspert
21. juli 2007 - 20:19 #8
Forslag:

package july;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ShuffleWithinWords {
    public static String shuffleWord(String s) {
        List<Character> lst = new ArrayList<Character>();
        for(int i = 1; i < s.length() - 1; i++) lst.add(s.charAt(i));
        Collections.shuffle(lst);
        StringBuffer sb = new StringBuffer();
        sb.append(s.charAt(0));
        for(int i = 0; i < lst.size(); i++) sb.append(lst.get(i));
        sb.append(s.charAt(s.length() - 1));
        return sb.toString();
    }
    public static String shuffleText(String s) {
        StringBuffer sb = new StringBuffer();
        Pattern p = Pattern.compile("([A-Za-zÆØÅæøå]+)([ .,;]+)");
        Matcher m = p.matcher(s);
        while(m.find()) {
            sb.append(shuffleWord(m.group(1)));
            sb.append(m.group(2));
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        System.out.println(shuffleText("Dette er en lille test med ord af forskellig længde."));
    }
}
Avatar billede arne_v Ekspert
07. august 2007 - 22:47 #9
rene ?
Avatar billede renebmadsen Nybegynder
15. november 2007 - 22:34 #10
er løst smid svar
undskyld vente tiden
Avatar billede arne_v Ekspert
15. november 2007 - 22:43 #11
moi ?
Avatar billede renebmadsen Nybegynder
15. november 2007 - 22:48 #12
hej arne jeg har et spm gående på noget j2me
hvor en jar fil driller. måske du gider se på det
Avatar billede arne_v Ekspert
15. november 2007 - 23:00 #13
Jeg har set det, men jeg har ikke umiddelbart noget bud.
Avatar billede renebmadsen Nybegynder
15. november 2007 - 23:18 #14
oki desværre
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