2010-11-18 2 views
13

У меня есть этот код:Wrap строка после того, как ряд символов словампереключает в Java

String s = "A very long string containing " + 
        "many many words and characters. " + 
        "Newlines will be entered at spaces."; 

    StringBuilder sb = new StringBuilder(s); 

    int i = 0; 
    while ((i = sb.indexOf(" ", i + 20)) != -1) { 
     sb.replace(i, i + 1, "\n"); 
    } 

    System.out.println(sb.toString()); 

Выход кода является:

A very long string containing 
many many words and 
characters. Newlines 
will be entered at spaces. 

Приведенный выше код оборачивает строку после следующее пространство из каждых 30 символов, но мне нужно обернуть строку после предыдущего количества каждых 30 символов, например, для первой строки:

A very long string

И вторая линия будет

containing many 

Пожалуйста, дайте некоторое правильное решение.

ответ

13

Использовать lastIndexOf вместо indexOf, т.е.

StringBuilder sb = new StringBuilder(s); 

int i = 0; 
while (i + 20 < sb.length() && (i = sb.lastIndexOf(" ", i + 20)) != -1) { 
    sb.replace(i, i + 1, "\n"); 
} 

System.out.println(sb.toString()); 

Это произведет следующий вывод:

A very long string 
containing many 
many words and 
characters. 
Newlines will be 
entered at spaces. 
+0

Спасибо за Ваш ответ. В этом примере, если я предоставляю строку как «Очень длинная строка122222222222222222222222222222, содержащая много слов и символов. Новые строки будут введены в пробелы». то старт не обертывается после длинного слова («string122222222222222222222222222222») и неожиданно завершается перед длинным словом. – Suvonkar

+0

@Suvonkar: вы можете изучить источник [WordUtils.wrap()] (http://kickjava.com/src/org/apache/commons/lang/WordUtils.java.htm) и реализовать его так, как вам нравится. – Emil

1

Вы можете попробовать следующее:

public static String wrapString(String s, String deliminator, int length) { 
    String result = ""; 
    int lastdelimPos = 0; 
    for (String token : s.split(" ", -1)) { 
     if (result.length() - lastdelimPos + token.length() > length) { 
      result = result + deliminator + token; 
      lastdelimPos = result.length() + 1; 
     } 
     else { 
      result += (result.isEmpty() ? "" : " ") + token; 
     } 
    } 
    return result; 
} 

вызов как wrapString ("ASD хуг AFZ", "\ п", 5)

-1
public static void main(String args[]) { 

     String s1="This is my world. This has to be broken."; 
     StringBuffer buffer=new StringBuffer(); 

     int length=s1.length(); 
     int thrshld=5; //this valueis threshold , which you can use 
     int a=length/thrshld; 

     if (a<=1) { 
      System.out.println(s1); 
     }else{ 
      String split[]=s1.split(" "); 
      for (int j = 0; j < split.length; j++) { 
       buffer.append(split[j]+" "); 

       if (buffer.length()>=thrshld) { 

        int lastindex=buffer.lastIndexOf(" "); 

        if (lastindex<buffer.length()) { 

         buffer.subSequence(lastindex, buffer.length()-1); 
         System.out.println(buffer.toString()); 
         buffer=null; 
         buffer=new StringBuffer(); 
        } 
       } 
      } 
     } 
    } 

Это может быть один из способов достижения

0

"\ n" делает слово.

String s = "A very long string containing \n" + 
"many many words and characters. \n" + 
"Newlines will be entered at spaces."; 

это решит вашу проблему

Смежные вопросы