Avatar billede it-dyret Nybegynder
20. maj 2002 - 16:34 Der er 9 kommentarer og
2 løsninger

Replace i StringBuffer

Det ser ud til, at der er et problem, når man ønsker at replace de sidste to pladser i en StringBuffer med andre tegn. StringBufferen vil udvide pladsen og skubber de oprindelige to tegn til højre for de to nye, således at strengen ved gentagne kald blot vokser og vokser...

Hvorfor - og hvordan får man den til at lade være med det?
Avatar billede soreno Praktikant
20. maj 2002 - 16:43 #1
Følgende virker fint:
public class Main
{
    public static void main(String args[])
    {
        StringBuffer sb = new StringBuffer();
        sb.append("HELLO");
        sb.append(" ");
        sb.append("WORLD??");
       
        for(int i=0;i<10;i++)
        {
            sb.replace(sb.length()-2, sb.length(), "!!");
            System.out.println(sb);
        }
    }
}

kan du ikke prøve at poste lidt kode.. ?
Avatar billede it-dyret Nybegynder
20. maj 2002 - 16:52 #2
Min StringBuffer ser således ud:

20000000bb000402001

så kører jeg noget kode i stil med
sb.replace(17, 19, "0"+x;
hvor x er et regnestykke på nogle instansvariable som f.eks. giver 1

derefter ser strengen således ud:
20000000bb00040200101
Avatar billede it-dyret Nybegynder
20. maj 2002 - 16:52 #3
sb.replace(17, 19, "0"+x; = sb.replace(17, 19, "0"+x);

:)
Avatar billede soreno Praktikant
20. maj 2002 - 17:00 #4
prøv lige at poste lidt mere kode, gerne der omkring hvor replace kaldet laves.

følgende lille simulering af min opfattelse af dit problem giver nemlig ingen problemer:

StringBuffer sb = new StringBuffer();
sb.append("20000000bb000402001");
for(int i=0;i<10;i++)
{
int beregning = (int)(Math.random()*10);
sb.replace(17, 19, "0"+beregning);
System.out.println(sb);
}
Avatar billede it-dyret Nybegynder
20. maj 2002 - 17:02 #5
Jeg kan se, at dit herlige "hello world" eksempel virker fint... også hvis man erstatter sb.length() osv. med absolutte værdier... men jeg kan ikke lige greje, hvorfor det ikke virker i min kode?!?!
Avatar billede it-dyret Nybegynder
20. maj 2002 - 17:07 #6
ok... spørgsmålet er så bare, hvor meget kode jeg skal kaste efter dig... StringBufferen bliver brugt til at lave en protokol, hvor en række konkrete klasser har hver deres delvise implementation af et større klasse hierarki, hvor metoden createProkol() bliver kaldt polymorfsk ned i gennem...

public void createProtokol() {
  super.createProtokol();   
    if ((maxHeat-currentHeat)/maxHeat<10)       
      getProtokol().replace(17, 19, "0"+(maxHeat-currentHeat)/maxHeat);   
    else
      getProtokol().replace(17, 19, ""+(maxHeat-currentHeat)/maxHeat);
}
Avatar billede soreno Praktikant
20. maj 2002 - 17:13 #7
forudsat getProtokol() henter en StringBuffer så ser det jo fint ud.
Avatar billede it-dyret Nybegynder
20. maj 2002 - 17:14 #8
Det gør den...
Avatar billede it-dyret Nybegynder
20. maj 2002 - 17:17 #9
Ehmmmm... fandt lige en insert, som lå og rodede længere oppe i hierarkiet.... pis! ;)
Avatar billede it-dyret Nybegynder
20. maj 2002 - 17:18 #10
Takker for hjælpen!
Avatar billede soreno Praktikant
20. maj 2002 - 17:19 #11
:-)
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