2013-03-05 8 views
8

Jestem nowym użytkownikiem języka Java pochodzącym z Pythona. Zastanawiam się, jak mogę pomnożyć ciąg w java. W Pythonie chciałbym to zrobić:Powtarzanie ciągu znaków w języku Java - podobnie jak w przypadku prostego wiersza Pythona

str1 = "hello" 
str2 = str1 * 10 

ciąg 2 ma teraz wartość:

#str2 == 'hellohellohellohellohellohellohellohellohellohello' 

Zastanawiałem się, co jest najprostszym sposobem, aby to osiągnąć w Javie. Czy muszę używać pętli for lub czy istnieje wbudowana metoda?

EDIT 1

Dzięki za odpowiedzi Mam ponieważ znaleziono eleganckie rozwiązanie mojego problemu:

str2 = new String(new char[10]).replace("\0", "hello"); 

UWAGA: Ta odpowiedź została pierwotnie wysłane przez user102008 tutaj: https://stackoverflow.com/a/4903603

+1

Nie, nie ma, niektóre szkielety/biblioteki oferują taką funkcję. W twoim obecnym kontekście (i ** unikaj dodawania bibliotek do pojedynczego małego zadania ** możesz zrobić sam i uczyć się w procesie), powinno wystarczyć pętli 'StringBuffer' lub' StringBuilder' i 'for'. – Gamb

+0

Jeśli uważasz, że na twoje pytanie odpowiedź została udzielona, ​​zaakceptuj tę odpowiedź. :) – wei2912

Odpowiedz

0

Nie sądzę, żeby można to było zrobić bez jakiejś pętli.

Na przykład:

String result = ""; 
for (int i=0; i<10; i++){ 
    result += "hello"; 
} 
+0

To jest w porządku dla 10 powtórzeń, ale AFAIK, dołączanie w 'String' jest kosztowną operacją i zamiast tego zalecany jest' StringBuffer'. – aa8y

+0

Dokładnie tak. Poprzednio testowałem wydajność każdej metody, a jeśli nie chcesz, aby iteracja działała jak 10000 razy, wydajność, jaką uzyskasz, jest minimalna, więc kod może być bardziej czytelny w ten sposób. W związku z tym to całkowicie zależy od programisty, który zdecyduje, którego użyć na podstawie powyższego stwierdzenia.Nadal będę jednak twierdził, że EASIEST to zdecydowanie nie używanie jakiejś biblioteki innej firmy, ponieważ w końcu zrobi to samo, a następnie prawdopodobnie więcej rzeczy, których niekoniecznie chcesz. ;) –

8

Chociaż nie wbudowany, Guava ma krótką drogę robi to za pomocą Strings:

str2 = Strings.repeat("hello", 10); 
3

Można użyć StringBuffer.

String str1 = "hello"; 
StringBuffer buffer = new StringBuffer(str1); 
for (int i = 0; i < 10; i++) { 
    buffer.append(str1); 
} 
str2 = buffer.toString(); 

Dokumentację można znaleźć w dokumencie http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html.

Jeśli nie zamierzasz używać żadnych nici, możesz użyć StringBuilder, który działa tak samo, jak StringBuffer, ale nie jest bezpieczny dla wątków. Patrz http://javahowto.blogspot.ca/2006/08/stringbuilder-vs-stringbuffer.html wiecej informacji (dzięki TheCapn)

+2

Pokonaj mnie do ponczu. Jednak w zależności od potrzeb PO może on potrzebować zważyć zalety/wady między 'StringBuilder' i' StringBuffer': http://javahowto.blogspot.ca/2006/08/stringbuilder-vs-stringbuffer.html – Grambot

+0

Nice link you added tam :) – wei2912

2

Pętla for jest prawdopodobnie najlepszym tutaj:

for (int i = 0; i < 10; i++) 
    str2 += "hello"; 

Jeśli robisz dużo powtórzeń (w zakresie 100+) rozważyć zastosowanie obiekt StringBuilder, ponieważ za każdym razem, gdy modyfikujesz ciąg, do którego przypisujesz nową pamięć i zwalniasz stary ciąg do zbierania śmieci. W przypadku, gdy robisz to wiele razy, będzie to problem z wydajnością.

+0

To jest w porządku dla 10 powtórzeń, ale AFAIK, dołączanie w 'String' jest kosztowną operacją i zamiast tego zalecany jest' StringBuffer'. – aa8y

Powiązane problemy