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]
따라서 다음과 일치하도록 사용할 수 있습니다.
\u000D\000A
->\r\n
페어- \ u000A- > 줄 바꿈 (
\n
) - \ u000B -> 행 표 (함께하지 혼동 DO 문자 표
\t
입니다\u0009
) - \ u000C- > 양식 피드 (
\f
) - \ u000D- > 캐리지 리턴 (
\r
) - \ u0085- > 다음 줄 (NEL)
- \ 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
되었습니다자바 -11을 반환 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가 방법을 :JDK11
String
lines()
이 문자열에서 추출 된 행 스트림을 행 종결 자로 구분하여 리턴합니다.
또한 문서 는 다음과 같이 말합니다.
줄 종결자는 다음 중 하나입니다. 줄 바꿈 문자 “\ 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을 반환 합니다.