webForumDet fria alternativet

Föra över vektorinnehåll till en String

Java

7 svar · 382 visningar · startad av Arre

Medlem sedan juli 200370 inlägg
Frågan#1

Helloo!
Tänkte se om man kan lägga över innehållet hos varje element i en ArrayList (som endast består utav sträng objekt) till en String, ex:

ArrayList mening (innehåller flera element med ett ord i varje).. dessa ska slåss ihop till en hel mening i en String variabel:

String text = " " ;

for(int i = 0; i < mening.size(); i++) {
String ordet = (String) mening.get(i);
text = ordet + " ";
}

I det här fallet består "text" endast utav det sista ordet i vektorn, dvs. det blir ingen mening direkt, bara ett ord. Hur gör man för att få en sammanhängande text med alla orden? :)

Tack på förhand!

Medlem sedan juni 20008 205 inlägg
#2

Använd += i stället för bara = på sista raden i loopen. (Egentligen ska man använda StringBuffer/Builder i såna här situationer, men det är en annan sak.)

Medlem sedan juli 200370 inlägg
#3

Yeay, det funkar jättebra! Tack så hemskt mycket! :)
Jag försökte precis lägga in String text objektet (som nu innehåller en mening) i en ArrayList:

inskrivningar.add(text);

Men varje gång jag gör den proceduren så ersätts första elementet med den senaste String text-objektet, dvs. den hamnar inte inte i ett nytt element i ArrayListen.. vad kan det bero på tro? :D

Medlem sedan juni 20008 205 inlägg
#4

Nånting annat ;)
add lägger alltid till sist i en ArrayList. Du råkar skapa nya ArrayLists varje gång du add:ar eller så...?

Medlem sedan juli 200370 inlägg
#5

:)
Njaa, jag tror inte det... den ersätter första elementet märkligt nog. I en for loop kan man lägga till i flera element, men enskildt kanske det inte går att ha en ökande "add" funktion för en ArrayList, eller e jag helt ute o cyklar nu? :S

Medlem sedan juni 20008 205 inlägg
#6

Nej, huruvida du anropar add från en loop eller ej är helt ovidkommande, det är inget som kompilatorn eller JVM:en har någon anledning att bry sig om. add (och alla andra metoder) beter sig alltid på samma sätt oavsett varifrån de anropas, annars vore det rätt meningslöst...

Fast det är fortfarande något annat som är fel, add lägger alltid till (som namnet antyder) och ersätter inte. Någon har kodat fel nånstans; antingen du eller Suns programmerare, och om du inte tar illa upp tror jag nog inte att felet ligger hos Sun :)

Medlem sedan aug. 20039 340 inlägg
#7

spango skrev:

(Egentligen ska man använda StringBuffer/Builder i såna här situationer, men det är en annan sak.)

Teknisk kommentar: Det fixar javac automtiskt.

Medlem sedan juni 20008 205 inlägg
#8

Jo, men inte lika effektivt. Att skriva foo += bar (där både foo och bar är strängar) är detsamma som att skriva foo = new StringBuffer(foo).append(bar).toString(), vilket innebär att det för varje varv i loopen allokeras en ny StringBuffer och en ny String. Om man använder iteration för att bygga upp en sträng är det effektivare att mecka med StringBuffers/Builders själv, så att man bara allokerar en StringBuffer och en String. (StringBuilder är som StringBuffer fast inte trådsäker och därmed effektivare.)

253 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)