Как сохранить существующие разрывы строк в функции - PullRequest
0 голосов
/ 28 июня 2018

У меня есть функция, которая вставляет разрыв строки перед словом, когда предложение длиннее заданного числа:

public static String wrapString(String string, int charWrap)
{
    int lastBreak = 0;
    int nextBreak = charWrap;
    if (string.length() > charWrap)
    {
        String setString = "";
        do {
            while (string.charAt(nextBreak) != ' ' && nextBreak > lastBreak)
            {
                nextBreak--;
            }
            if (nextBreak == lastBreak)
            {
                nextBreak = lastBreak + charWrap;
            }
            setString += string.substring(lastBreak, nextBreak).trim() + "\n";
            lastBreak = nextBreak;
            nextBreak += charWrap;

        }
        while (nextBreak < string.length());
        setString += string.substring(lastBreak).trim();
        return setString;
    }
    else
    {
        return string;
    }
}

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

Например, я отправляю в функцию следующее: «В полном порядке», «Сюжеты на свидание с современностью», «Сказка о минусах». sera adressé au titulaire. "

Он считает символ "\ n" как символ, поэтому вырезает следующую фразу раньше, чем должен.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вы можете сначала разделить предложения по разрывам строк, а затем запустить свой код для каждой из строк. Наконец, объедините все строки.

String para = "abc abc abc abc abc abc abc abc abc abc \n" +
            "abc abc abc abc abc abc abc abc abc abc ";

String[] sentences = para.split("\n");
String finalString = "";
for (String s : sentences) {
    finalString = finalString + wrapString(s, 20).trim() + "\n";
}

System.out.println(finalString); 
0 голосов
/ 28 июня 2018

Может быть, следующий фрагмент кода - это то, что вы ищете:

public static String wrapString(String string, int charWrap)
{
int lastBreak = 0;
int nextBreak = charWrap;
if (string.length() > charWrap)
{
    String setString = "";
   int counter = 0; // create a counter to help you check each char if it is not a new line
    do {
        if(string.charAt(lastBreak+counter) == '\n' || 
        string.charAt(lastBreak+counter) == '\r') { 
        nextBreak = lastBreak + charWrap;
        setString += string.substring(lastBreak, nextBreak).trim() + "\n";
        lastBreak = nextBreak;
        counter = 0;// if it is a new line change counter back to zero
        }
        if(counter == charWrap) { // if counter has reached max range to split without finding any new line character, proceed with normal process of injecting new line)
         nextBreak = lastBreak+counter; 
        while (string.charAt(nextBreak) != ' ' && nextBreak > lastBreak)
        {
            nextBreak--;
        }
        if (nextBreak == lastBreak)
        {
            nextBreak = lastBreak + charWrap;
        }
        counter = 0;
        setString += string.substring(lastBreak, nextBreak).trim() + "\n";
        lastBreak = nextBreak;
        }
        counter ++;

    }
    while ((counter+lastBreak) < string.length());
    setString += string.substring(lastBreak).trim();
    return setString;
}
else
{
    return string;
}
}
...