Разделить строку Java на новую строку



Я пытаюсь разделить текст в JTextArea используя регулярное выражение для разбиения строки n однако, это не работает и я также судим rn|r|n и многие другие комбинации регулярных выражений.
Код:



public void insertUpdate(DocumentEvent e) {
String split[], docStr = null;
Document textAreaDoc = (Document)e.getDocument();

try {
docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset());
} catch (BadLocationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

split = docStr.split("n");
}
870   17  

17 ответов:

Это должно охватывать вас:

String lines[] = string.split("\r?\n");

на самом деле есть только две новые строки (UNIX и Windows), о которых вам нужно беспокоиться.

Если вы не хотите, чтобы пустые строки:

String.split("[\r\n]+")

split метод использует регулярное выражение (регулярные выражения). Так как Java 8 regex поддерживает \R, который представляет собой (с документация класса Pattern):

Linebreak matcher
\R в любой последовательности разрыв строки в Юникоде, эквивалентно \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

Итак, мы можем использовать его, чтобы соответствовать:

Как видите,\r\n помещается в начало регулярного выражения, которое гарантирует, что регулярное выражение попытается сначала соответствовать этому пара, и только если это не удается, он будет пытаться соответствовать один символ разделители строк.


так что если вы хотите разделить на разделительную линию, используйте split("\R").

если вы не хочу удалять из результирующего массива конечные пустые строки "" использовать split(regex, limit) с отрицательным

String.split(System.getProperty("line.separator"));

Это должно быть независимо от системы

вам не нужно удваивать escape-символы в группах символов.

для всех непустых строк используйте:

String.split("[\r\n]+")

может быть, это будет работать:

удалите двойные обратные косые черты из параметра метода split:

split = docStr.split("\n");

для сохранения пустых строк от раздавливания используйте:

String lines[] = String.split("\r?\n", -1);

все ответы, приведенные здесь, на самом деле не уважают определение Javas новых строк, как указано, например, в BufferedReader#readline. Java принимает \n,\r и \r\n как новую строку. Некоторые ответы соответствуют нескольким пустым строкам или искаженным файлам. Е..г. <sometext>\n\r\n<someothertext> при использовании [\r\n]+приведет к двум строкам.

String lines[] = string.split("(\r\n|\r|\n)", -1);

напротив, ответ выше имеет следующие свойства:

  • оно исполняет с определением Javas новой линии как например BufferedReader использует его
  • он не соответствует нескольким новым строкам
  • он не удаляет конечные пустые строки

приведенный выше код на самом деле не делает ничего видимого - он просто вычисляет, а затем сбрасывает расчет. Это код, который вы использовали, или просто пример для этого вопроса?

попробуйте сделать textAreaDoc.insertString (int, String, AttributeSet) в конце?

новый метод lines была представлена String класс java-11, который возвращает Stream<String>

возвращает поток подстрок, извлеченных из этой строки секционированных по линии терминатора.

признанные Терминаторы линии - это линия подачи" \n " (U+000A), каретка возврат "\r " (U+000D) и возврат каретки, за которым немедленно следует a линия подачи "\r\n " (U+000D U+000A).

вот несколько примеров:

jshell> "lorem \n ipusm \n sit".lines().forEach(System.out::println)
lorem
 ipusm
 sit

jshell> "lorem \n ipusm \r  sit".lines().forEach(System.out::println)
lorem
 ipusm
  sit

jshell> "lorem \n ipusm \r\n  sit".lines().forEach(System.out::println)
lorem
 ipusm
  sit

строка#lines ()

Если по какой-то причине вы не хотите использовать String.split (например, из-за регулярные выражения) и вы хотите использовать функциональное программирование на Java 8 или новее:

List<String> lines = new BufferedReader(new StringReader(string))
        .lines()
        .collect(Collectors.toList());

String lines[] =String.split( System.lineSeparator())

после неудачных попыток на основании данного решения. Я заменяю \n С каким-то особым словом, а затем разделить. Для меня следующий трюк сделал:

article = "Alice phoned\n bob.";
article = article.replace("\n", " NEWLINE ");
String sen [] = article.split(" NEWLINE ");

Я не мог повторить пример, приведенный в вопросе. Но, я думаю, эта логика может быть применена.

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

import com.google.common.base.Splitter;

Iterable<String> split = Splitter.onPattern("\r?\n").trimResults().omitEmptyStrings().split(docStr);

обратите внимание, что в результате Iterable, а не массив.

  • попробуйте это надеюсь, это было полезно для вас

 String split[], docStr = null;
Document textAreaDoc = (Document)e.getDocument();

try {
    docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset());
} catch (BadLocationException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

split = docStr.split("\n");

есть три различных соглашения (можно сказать, что это де-факто стандарты) для установки и отображения строки:

  • carriage return + line feed
  • line feed
  • carriage return

в некоторых текстовых редакторах можно обменять один на другой:

Notepad++

самое простое-нормализовать до line feedи затем разделить.

final String[] lines = contents.replace("\r\n", "\n")
                               .replace("\r", "\n")
                               .split("\n", -1);
package in.javadomain;

public class JavaSplit {

    public static void main(String[] args) {
        String input = "chennai\nvellore\ncoimbatore\nbangalore\narcot";
        System.out.println("Before split:\n");
        System.out.println(input);

        String[] inputSplitNewLine = input.split("\n");
        System.out.println("\n After split:\n");
        for(int i=0; i<inputSplitNewLine.length; i++){
            System.out.println(inputSplitNewLine[i]);
        }
    }

}

Comments

    Ничего не найдено.