2009-06-21 2 views
0

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

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" и установить надлежащий порядок и подтекста.

+0

Пожалуйста, добавьте информацию язык/инструменты в вопросе и бирками. например C#, winforms, textbox или adobe, air, textbox – shahkalpesh

ответ

0

Вы можете изменить порядок выполнения действий. Сначала разделите содержимое своей текстовой области на вхождения «\ 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 
} 

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

+0

Спасибо balpha. Но, как я упомянул проблему, я имею, чтобы установить надлежащее другое число и subText ... как обойти эту ... любую помощь. – desmiserables

+0

Я отредактировал свой ответ. – balpha

+0

Спасибо, Балфа! Единственное, что если мы разделим строку на «/ n», то мы проиграем строки, содержащие только «/ n». Идея состоит в том, что если пользователь нажимает только клавишу ввода, все равно эти строки должны учитываться, если только такие вхождения не находятся в начале текстовой области без ввода символов до того, как пользователь нажмет клавишу ввода. – desmiserables

0

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

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
Смежные вопросы