[java] 줄 바꿈으로 Java 문자열 분할

JTextArea정규식을 사용하여 문자열을 분할하여 텍스트를 분할하려고 \n하지만 작동하지 않으며 정규 표현식 \r\n|\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");
}



답변

이것은 당신을 커버해야합니다 :

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

실제로 걱정해야 할 줄 바꿈은 두 가지뿐입니다 (UNIX 및 Windows).


답변

String#split​(String regex)방법은 정규식 (정규 표현식)을 사용하고 있습니다. Java 8 정규식은 \R( 패턴 클래스의 문서 에서)를 나타내는 것을 지원하기 때문에 :

줄 바꿈 매처
\ R 모든 유니 코드 줄 바꿈 시퀀스는 다음과 같습니다.
\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

따라서 다음과 일치하도록 사용할 수 있습니다.

보시다시피 \r\n정규 표현식이 시작될 때 정규 표현식 이이 쌍을 먼저 일치 시키도록하고 일치가 실패하는 경우 단일 문자 줄 구분 기호 를 일치 시킵니다.


따라서 줄 구분 기호를 분할하려면을 사용하십시오 split("\\R").

당신이 경우 빈 문자열이 뒤에 배열 결과에서 제거하지 않으"" 사용 split(regex, limit)부정적인와 limit같은 매개 변수를 split("\\R", -1).

하나 이상을 처리하려면 빈 줄을 단일 구분 기호로 사용하십시오 split("\\R+").


답변

빈 줄을 원하지 않는 경우 :

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


답변

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

이것은 시스템 독립적이어야합니다


답변

수업에 새로운 방법 lines이 도입 String되었습니다을 반환 Stream<String>

이 문자열에서 추출 된 하위 문자열 스트림을 줄 종결 자로 분할하여 반환합니다.

인식 된 줄 종결자는 줄 바꿈 “\ n”(U + 000A), 캐리지 리턴 “\ r”(U + 000D) 및 캐리지 리턴 바로 다음에 줄 바꿈 “\ 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

문자열 # 라인 ()


답변

문자 그룹에서 이중 이스케이프 문자를 사용할 필요는 없습니다.

빈 줄이 아닌 모든 줄에 다음을 사용하십시오.

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


답변

에서 클래스 A가 방법을 :JDK11Stringlines()

이 문자열에서 추출 된 행 스트림을 행 종결 자로 구분하여 리턴합니다.

또한 문서 는 다음과 같이 말합니다.

줄 종결자는 다음 중 하나입니다. 줄 바꿈 문자 “\ n”(U + 000A), 캐리지 리턴 문자 “\ r”(U + 000D) 또는 캐리지 리턴 바로 다음에 줄 바꿈 “\ r \ n “(U + 000D U + 000A). 줄은 0 개 이상의 문자 시퀀스 다음에 줄 종결자가 오거나 하나 이상의 문자 시퀀스 다음에 문자열 끝입니다. 라인은 라인 종결자를 포함하지 않습니다.

이것으로 간단하게 할 수 있습니다 :

Stream<String> stream = str.lines();

그런 다음 배열을 원한다면 :

String[] array = str.lines().toArray(String[]::new);

이 메소드는 가능한 병렬 옵션의 간결 하고 선언적인 표현 을 작성할 수 있으므로 많은 옵션을 통해 Stream을 반환 합니다.