Avatar billede pollepalle Nybegynder
23. september 2004 - 15:22 Der er 14 kommentarer og
1 løsning

replace x antal karakterer i en streng

jeg har en lang streng (ikke array) hvor i jeg gerne vil udskite x (variabelt) antal tegn med et andet.

strengen indeholder alt muligt, men det er kun der hvor der er . (punktum) at de x antal replace må foregå - Så skal de skiftes ud med P (stort P).

Flash har jo ingen replace så hvordan gør man så?
Avatar billede Slettet bruger
23. september 2004 - 15:27 #1
ka du ikk' bare bruge
str.split(".").join("P")
Avatar billede pollepalle Nybegynder
23. september 2004 - 15:32 #2
hvis jeg vidste hvordan jeg lavede x antal random kald så jo helt sikkert. Jeg er bare ikke så klog men bliver det vel en dag.
Avatar billede Slettet bruger
23. september 2004 - 15:38 #3
Prøv at forklare hvad hensigten med funktionen er.
- umiddelbart ser jeg ingen fornuft i at udskifte et punktum med et stort P
Men det er måske bare mig ;)
Avatar billede pollepalle Nybegynder
23. september 2004 - 16:05 #4
jeg har en streng M

m = "123...456...abc..d.e.f.g.h";

Her vil jeg gerne udskifte X antal . med P - Der kan være variabelt antal punktummer og variabelt antal der skal udskiftes.
Avatar billede Slettet bruger
23. september 2004 - 16:11 #5
m = "123...456...abc..d.e.f.g.h";
m = m.split(".").join("P");
trace(m)
// Outputter: 123PPP456PPPabcPPdPePfPgPh
Avatar billede pollepalle Nybegynder
23. september 2004 - 16:51 #6
det skal jo være X tilfældige af punktummerne der skal skiftes - Ikke alle sammen.
Avatar billede Slettet bruger
23. september 2004 - 17:18 #7
Ach so ...

Jemane hvor stor skal sandsynligheden være for et udfald..??

Her er et eksempel på 50/50

m = "123...456...abc..d.e.f.g.h";
nm=""

Arr = m.split(".")
for(i=0;i<Arr.length;i++){
if(random(2)){
nm = nm+Arr[i]+"P"   
}else{
nm = nm+Arr[i]+"."
}
}

trace(m)
trace(nm)
Avatar billede pollepalle Nybegynder
23. september 2004 - 18:49 #8
det skal helst være så tilfældigt som muligt - Der er mellem ingen og 6 steder der skal skiftes.
Avatar billede Slettet bruger
23. september 2004 - 19:19 #9
ok - her er en function som du selv kan tilrette.
den fungerer således:

myString.replacestr('A', 'B', C, D);

// Forklaring
A: er det du vil udskifte
B: er det du vil erstatte med
C: er hyppigheden for din random angivet i %
D: er max loft for udskiftning


// kode
String.prototype.replacestr = function(findstr, replace, tendens, max) {
    var repstring = '';
    var counter = 0
    var xstring = this.split(findstr);
    var xstringlen = xstring.length;
    for (x=0; x<xstringlen; x++) {
    if((random(100)+1)<=tendens && counter<max){
    repstring = repstring+xstring[x]+replace
    counter++
    }else{
    repstring = repstring+xstring[x]+findstr   
    }
    }
    return repstring;
};


// Eksempel:

m = "123...456...abc..d.e.f.g.h";

// Her udskifter den "." med "P" i 50% af tilfældende, dog højest 6 gange
trace(m.replacestr('.','P',50,6));

- så kan du selv konfigurere hvor meget og hvor lidt den skal udskifte i din streng.
Avatar billede pollepalle Nybegynder
23. september 2004 - 19:23 #10
det er simpelthen i orden. Smid et svar!
Avatar billede Slettet bruger
23. september 2004 - 19:25 #11
godt du kan bruge det ;)
Avatar billede pollepalle Nybegynder
23. september 2004 - 20:13 #12
jepski
Avatar billede pollepalle Nybegynder
23. september 2004 - 22:29 #13
ok jeg var lidt for hurtig. Den returnerer ikke korrekt hver gang.

Her skal den returnere 7 O´er hvoraf de 4 allerede findes, men den returnere ofte 7 men også kun de 4 nogle gange (eller 5/6)

String.prototype.replacestr = function(findstr, replace, tendens, max) {
    var repstring = '';
    var counter = 0
    var xstring = this.split(findstr);
    var xstringlen = xstring.length;
    for (x=0; x<xstringlen; x++) {
        if((random(100)+1)<=tendens && counter<max){
            repstring = repstring+xstring[x]+replace
            counter++
        }else{
            repstring = repstring+xstring[x]+findstr   
        }
    }
    return repstring;
};

//

var m;

m = "############################" + "#............##............#" + "#.####.#####.##.#####.####.#" + "#O####.#####.##.#####.####O#" + "#.####.#####.##.#####.####.#" + "#..........................#" + "#.####.##.########.##.####.#" + "#.####.##.########.##.####.#" + "#......##....##....##......#" + "######.##### ## #####.######" + "######.##### ## #####.######" + "######.##          ##.######" + "######.## ######## ##.######" + "######.## # # # ## ##.######" + "L    .  # # # ##  .    R" + "######.## ### #### ##.######" + "######.## ######## ##.######" + "######.##          ##.######" + "######.## ######## ##.######" + "######.## ######## ##.######" + "#............##............#" + "#.####.#####.##.#####.####.#" + "#.####.#####.##.#####.####.#" + "#O..##.......  .......##..O#" + "###.##.##.########.##.##.###" + "###.##.##.########.##.##.###" + "#......##....##....##......#" + "#.##########.##.##########.#" + "#.##########.##.##########.#" + "#..........................#" + "############################";

var m_temp;
    m_temp = m.replacestr ('.', 'O', 1, 3);
   
m = m_temp;
for (w = 0; w < m.length; w++) {
    if (m.charAt (w) == "O") {
        trace ("FOUND O");
    }
}
Avatar billede Slettet bruger
23. september 2004 - 23:24 #14
Du har jo sat udfaldet ar random til at være 1% - derfor vil den outputte mellem de 4 O'er der er i forvejen og op til +3 som du har sat max til, men med en meget lille sandsynlighed (1%) for at opnå max.

Du kan jo hæve tendensen af random til 50, og udfaldet vil hyppigere være max
m.replacestr ('.', 'O', 50, 3);

Såfremt funktionen SKAL replace antal som angivet i MAX, men med random pick, skal funktionen lige korrigeres em smule - Jeg kigger på det i morgen - er for træt nu.
Avatar billede Slettet bruger
24. september 2004 - 09:33 #15
Her er en ny funktion

replacestr ('A','B',C);

// Forklaring
A: er det du vil udskifte
B: er det du vil erstatte med
C: Faktiske antal randomize replacement


// kode
function shuffle () {
return Math.floor(Math.random()*3)-1;
}

String.prototype.replacestr = function(findstr, replace, tendens) {
    var repstring = '';
    var xstring = this.split(findstr);
    var xstringlen = xstring.length;
    marr=[];
    for(i=0;i<tendens;i++){
    marr.push(replace)
    }
    for(i=0;i<(xstringlen-tendens);i++){
    marr.push(findstr)
    }
    marr.sort(shuffle)
    for (x=0; x<xstringlen; x++) {
            repstring = repstring+xstring[x]+marr[x]
    }
    return repstring;
};


// Eksempel
var m;
m = ".........................................";

var m_temp;
    m_temp = m.replacestr ('.','#',3);
   
m = m_temp;
for (w = 0; w < m.length; w++) {
    if (m.charAt (w) == "#") {
        trace ("FOUND #");
    }
}
trace(m)

// hvis du så yderligere vil lave random på antal skift kan du skrive således
m.replacestr ('.','#',random(TAL));

Mvh, Michael
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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