2016-01-23 2 views
2

У меня длинная строка и вы хотите разбить ее на несколько подстрок, чтобы я мог отображать ее в меню как абзац, а не одну длинную строку. Но я не хочу разбивать его в середине слова (так что разрыв каждого n символов не будет работать).Java String Разрыв по пробелу после позиции

Так что я хочу разбить строку на первое вхождение любого из символов в строке после определенной точки (в моем случае символы будут пространством и точкой с запятой, но они могут быть чем угодно).

Что-то вроде:

String result[] = breakString(baseString, // String 
           lineLength, // int 
           breakChars) // String 
+2

Возможно, связанные с: [разбить строку в Java на равные подстрок длины, сохраняя при этом границы слов] (http://stackoverflow.com/questions/25853393/split-a-string-in-java-into-equal -length-substrings-while-maintenance-word-bound) – Pshemo

+0

Вы действительно хотите сломать строку после определенной точки, поэтому каждая строка содержит __at наименьшие символы 'lineLength'? Или абзац должен содержать то, что __at most__, нарушая после последнего появления 'breakChars' в символах' lineLength'? – bal

ответ

0

Рассмотрим расщепление с помощью символов разрыва первого, а затем суммированием длин сегментов, которые в результате этого раскола, пока вы не достигнете своей длины линии.

0

Это один из способов. Я взял «по первому вхождению любого из символов в строке после определенной точки», чтобы означать, что следующий экземпляр breakChars после некоторого lineLength должен быть концом строки. Итак, breakString("aaabc", 2, "b") вернется {"aaab", "c"}.

static String[] breakString(String baseString, int lineLength, String breakChars) { 
    // find `lineLength` or more characters of the String, until the `breakChars` string 
    Pattern p = Pattern.compile(".{" + lineLength + ",}?" + Pattern.quote(breakChars)); 

    Matcher m = p.matcher(baseString); 
    List<String> list = new LinkedList<>(); 
    int index = 0; 
    while (m.find(index)) { 
     String s = m.group(); 
     list.add(s); 

     // find another match starting at the end of the last one 
     index = m.end(); 
    } 

    if (index < baseString.length() - 1) { 
     list.add(baseString.substring(index)); 
    } 

    return list.toArray(new String[list.size()]); 
} 
Смежные вопросы