Java - разбить строку на предложения с ограничением символов - PullRequest
2 голосов
/ 20 февраля 2012

Я хочу разделить текст на предложения (разделить на . или BreakIterator).Но: в каждом предложении не должно быть более 100 символов.

Пример:

Lorem ipsum dolor sit. Amet consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore
magna aliquyam erat, sed diam voluptua. At vero eos et accusam
et justo duo dolores.

Кому: (3 элемента, без разбиения слова, но предложение)

" Lorem ipsum dolor sit. ",
" Amet consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
  ut labore et dolore magna",
" aliquyam erat, sed diam voluptua. At vero eos et accusam
  et justo duo dolores. "

Как я могу сделать это правильно?

Ответы [ 3 ]

3 голосов
/ 20 февраля 2012

Вероятно, есть лучший способ сделать это, но здесь он идет:

public static void main(String... args) {

    String originalString = "Lorem ipsum dolor sit. Amet consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore "
            + "et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores.";


    String[] s1 = originalString.split("\\.");
    List<String> list = new ArrayList<String>();

    for (String s : s1)
        if (s.length() > 100)
            list.addAll(Arrays.asList(s.split("(?<=\\G.{100})")));
        else
            list.add(s);

    System.out.println(list);
}

Регулярное выражение "разбить строку по размеру" взято из этого SO вопроса . Вы, вероятно, могли бы объединить два регулярных выражения, но я не уверен, что это было бы мудрой идеей (:

Если регулярное выражение не выполняется в Andrond (оператор \G не везде распознан), попробуйте другие решения, связанные , чтобы разбить строку на основе ее размера.

2 голосов
/ 20 февраля 2012

Решено (спасибо Macarse за вдохновение):

String[] words = text.split("(?=[\\s\\.])");
ArrayList<String> array = new ArrayList<String>();
int i = 0;
while (words.length > i) {
    String line = "";
    while ( words.length > i && line.length() + words[i].length() < 100 ) {
        line += words[i];
        i++;
    }
    array.add(line);
}
2 голосов
/ 20 февраля 2012

Regex не очень поможет вам в подобных ситуациях.

Я бы разделил текст, используя пробелы или ., а затем начал бы объединяться. Примерно так:

Псевдокод

words = text.split("[\s\.]");
lines = new List();
while ( words.length() > 0 ) {

  String line = new String();
  while ( line.length() + words.get(0).length() < 100 ) {
    line += words.get(0);
    words.remove(words.get(0));
  }

  lines.add(line);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...