2011-10-04 15 views
5

Potrzebuję uzyskać pozycję początkową nowej linii podczas zapętlania przez StringBuffer. Say mam następujący dokument w StringBufferPobierz indeks początku nowej linii w buforze String

"This is a test 
Test 
Testing Testing" 

Nowe linie istnieć po "Test", "Test" i "testing".

muszę coś takiego:

for(int i =0;i < StringBuffer.capacity(); i++){ 
if(StringBuffer.chatAt(i) == '\n') 
    System.out.println("New line at " + i); 

} 

wiem, że nie będzie działać, ponieważ „\ n” nie jest znakiem. Jakieś pomysły? :)

Dzięki

+10

'' \ n'' to postać. –

+2

Nie działa, ponieważ pojemność() nie jest taka sama jak długość(). Przeczytaj dokumentację! – kan

Odpowiedz

6

Możesz uprość swoją pętlę jako taką:

StringBuffer str = new StringBuffer("This is a\ntest, this\n\nis a test\n"); 

for (int pos = str.indexOf("\n"); pos != -1; pos = str.indexOf("\n", pos + 1)) { 
    System.out.println("\\n at " + pos); 
} 
2
System.out.println("New line at " + stringBuffer.indexOf("\n")); 

(bez pętli już konieczne)

+0

To po prostu wydrukuje indeks pierwszego '' \ n''. Co z innymi? –

+1

To jest to, czego potrzebuję. Dla innych mógłbym mieć pętlę while i zakończy się, gdy indexOf to -1 :) – Decrypter

+0

@Decrypter, powinieneś mieć pętlę for od beny23, bo to fajny pomysł. – rapadura

1

Twój kod działa poprawnie z kilkoma modyfikacjami: składniowych wyjściowego

public static void main(String[] args) { 
    final StringBuffer sb = new StringBuffer("This is a test\nTest\nTesting Testing"); 

    for (int i = 0; i < sb.length(); i++) { 
     if (sb.charAt(i) == '\n') 
      System.out.println("New line at " + i); 
    } 
} 

konsoli:

New line at 14 
New line at 19