2011-10-04 17 views
5

Tôi cần lấy vị trí bắt đầu của dòng mới khi lặp qua StringBuffer. Nói rằng tôi có tài liệu sau đây trong một StringBufferLấy chỉ mục bắt đầu một dòng mới trong Stringbuffer

"This is a test 
Test 
Testing Testing" 

dòng mới tồn tại sau khi "test", "Test" và "Thử nghiệm".

tôi cần một cái gì đó như:

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

} 

Tôi biết rằng sẽ không làm việc vì '\ n' không phải là một nhân vật. Bất kỳ ý tưởng? :)

Cảm ơn

+10

''\ n'' là một ký tự. –

+2

Nó không hoạt động vì công suất() không giống như chiều dài(). Vui lòng đọc tài liệu! – kan

Trả lời

6

Bạn có thể đơn giản hóa vòng lặp của bạn như vậy:

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")); 

(không vòng lặp cần thiết nữa)

+0

Điều đó sẽ chỉ in chỉ mục của ''\ n'' đầu tiên. Còn những người khác? –

+1

Đó là những gì tôi cần. Đối với những người khác tôi có thể có một vòng lặp while và nó sẽ kết thúc khi indexOf là -1 :) – Decrypter

+0

@ Decrypter, bạn nên có vòng lặp for từ beny23, vì đó là một ý tưởng hay. – rapadura

1

Mã của bạn hoạt động tốt với một vài thay đổi cú pháp: đầu ra

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); 
    } 
} 

Console:

New line at 14 
New line at 19