текстовая область-текст-для-разделения-с условиями повторяется - PullRequest
0 голосов
/ 21 июня 2009

У меня есть текстовая область, в которой я ограничил пользователя от ввода более 15 символов в одну строку, так как я хочу разделить текст свободного потока на подстроки с максимальным ограничением 15 символов и назначить каждой строке номер заказа. Это то, что я делал в своем классе Java:

int interval = 15;                
items = new ArrayList();
 TextItem item = null;
 for (int i = 0; i < text.length(); i = i + interval) {
  item = new TextItem ();
  item.setOrder(i);

  if (i + interval < text.length()) {
    item.setSubText(text.substring(i, i + interval));
    items.add(item);
  } 
  else {
    item.setSubText(text.substring(i));
    items.add(item);
  }
}

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

Я могу проверить, содержит ли мой text.substring(i, i + interval) какой-либо "\n" и разбить его там, но проблема заключается в том, чтобы получить оставшиеся символы после "\n" до следующих 15 или до следующих "\n" и установить правильный порядок и субтекст.

Ответы [ 2 ]

0 голосов
/ 22 июня 2009

Это то, что вы пытаетесь сделать?

public static void main(String[] args)
{
  String str =
  "\n\n123456789ABCDEF123456\n123456789AB\n\n123" +
  "456789ABCDEF123456789AB\n123456789ABCDEF\n";

  List<String> parts = new ArrayList<String>();

  // remove leading line separators
  str = str.replaceFirst("\\A[\r\n]+", "");

  // match up to 15 non-newline characters, but don't
  // match a zero-length string at the end
  Matcher m = Pattern.compile("(?!\\z).{0,15}").matcher(str);
  while (m.find())
  {
    parts.add(m.group());
  }

  for (String s : parts)
  {
    System.out.println(s);
  }
}

результат:

123456789ABCDEF
123456

123456789AB


123456789ABCDEF
123456789AB

123456789ABCDEF
0 голосов
/ 21 июня 2009

Вы можете изменить порядок действий: во-первых, разделите содержимое вашей текстовой области по появлению '\ n'. Затем возьмите каждую из полученных строк и разбейте их на части максимальной длины 15.

Редактировать: Я не совсем уверен в том, что вы хотите сделать, но вот что я хотел бы сделать. Обратите внимание, что я не программист на Java, поэтому я могу делать ложные предположения, а следующее не проверено.

int interval = 15;                
items = new ArrayList();
lines = text.split("\n");
for (int i = 0; i < lines.length(); i++)
{
  str = lines[i];
  while (str.length() > interval)
  {
    items.add(str.substring(0,interval)); // add the first 15 characters of str to the list
    str = str.substring(interval); // ... and remove them from str
  }
  items.add(str); // add the rest
}

После этого items представляет собой ArrayList строк, которые находятся в правильном порядке. Должна быть возможность расширить этот код на любую дополнительную информацию, которую вам нужно сохранить с фактическими строками.

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