새 줄에 의한 Java 문자열 분할
JTextArea
\n
도 안 , , 것, 것, 도, 도, 도, however, 도, 도, 도, 도, 도, 도, 도, 도, 도, 도, 도, 도, 도, however, however.\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)은 2개뿐입니다.
String#split(String regex)
메서드가 regex(정규 표현)를 사용하고 있습니다.Java 8 regex가 지원되므로\R
(Pattern 클래스의 문서에서) 다음을 나타냅니다.
\R줄는 \R Unicode 줄 바꿈에\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
이를 사용하여 다음을 일치시킬 수 있습니다.
\u000D\000A
->\r\n
짝- \u000A -> 라인 피드 (
\n
) - \u000B -> 줄표 (문자표와 혼동하지 마십시오)
- \u000C -> 폼 피드 (
\f
) - \u000D -> 캐리지 리턴 (
\r
) - \u0085 -> 다음 줄 (NEL)
- \u2028 -> 행 구분자
- \u2029 -> 패러그래프 구분자
바와 같이요.\r\n
는 regex 의 선두에 배치되어 regex 가 이 페어의 조회를 최초로 시도합니다.또, 이 조회가 실패했을 경우에만, 1 문자의 행 구분 기호와의 조회를 시도합니다.
를 사용합니다.split("\\R")
결과 배열에서 빈 문자열 후행에서 제거하지 않으려면split(regex, limit)
limit
「」등의 split("\\R", -1)
.
의 빈 을 단일 하려면 , 「」를 사용합니다.split("\\R+")
.
빈 행을 원하지 않는 경우:
String.split("[\\r\\n]+")
String.split(System.lineSeparator());
이것은 시스템에 의존하지 않습니다.
방법 ' ' ' 'lines
소개되었습니다.String
java-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
»JDK11
String
에는 '''가 .lines()
★★★★
이 문자열에서 추출된 줄의 스트림을 반환하고 줄 바꿈으로 구분합니다.
또한 문서에는 다음과 같이 기술되어 있습니다.
라인 터미네이터는 라인 피드 문자 "\n"(U+000A), 캐리지 리턴 문자 "\r"(U+000D) 또는 라인 피드 "\r\n"(U+000D U+000A) 바로 뒤에 이어지는 캐리지 리턴 문자 "\r"(U+000D U+000A) 중 하나입니다.행은 0 문자 이상의 시퀀스 뒤에 행 끝자를 붙이거나 문자열의 끝에 이어지는 1 문자 이상의 시퀀스입니다.회선에는 회선 터미네이터가 포함되지 않습니다.
이를 통해 다음과 같은 작업을 수행할 수 있습니다.
Stream<String> stream = str.lines();
배열을 원하는 경우:
String[] array = str.lines().toArray(String[]::new);
이 메서드를 사용하면 병렬 연산의 간결하고 선언적인 표현을 쓸 수 있으므로 Stream it on up 많은 옵션을 반환합니다.
캐릭터 그룹에서 문자를 이중으로 이스케이프할 필요는 없습니다.
빈 행이 아닌 모든 행에 대해 다음을 사용합니다.
String.split("[\r\n]+")
여기에서 제시된 모든 답변은 실제로 예시와 같이 새로운 라인에 대한 자바 정의를 존중하지 않습니다.BufferedReader#readline.는 Java를 받아들이고 .\n
,\r
★★★★★★★★★★★★★★★★★」\r\n
새로운 행으로서.를 들어 예를 들어, '나'와 '나'가 있습니다.<sometext>\n\r\n<someothertext>
「」를 하고 있는 [\r\n]+
아아아아아아아아아아아아아아아아아아아아.
String lines[] = string.split("(\r\n|\r|\n)", -1);
반면 위의 답변에는 다음과 같은 속성이 있습니다.
- 예를 들어 BufferedReader가 사용하고 있는 새로운 행의 Javas 정의를 준수합니다.
- 여러 개의 새 행과 일치하지 않습니다.
- 후행의 빈 행은 삭제되지 않습니다.
어떤 한다면,String.split
(예를 들어 정규 표현으로 인해) Java 8 이후의 기능 프로그래밍을 사용하는 경우:
List<String> lines = new BufferedReader(new StringReader(string))
.lines()
.collect(Collectors.toList());
어쩌면 이게 효과가 있을지도 몰라.
분할 방식의 매개 변수에서 이중 백슬래시를 제거합니다.
split = docStr.split("\n");
빈 줄이 찌그러지지 않도록 하려면 다음을 사용하십시오.
String lines[] = String.split("\\r?\\n", -1);
위의 답변은 안드로이드에서 Pshemo의 응답 덕분에 나에게 도움이 되지 않았습니다.Pshemo의 답변 중 일부를 여기에 남긴다.
split("\\\\n")
위의 코드는 실제로 보이는 것은 아무것도 하지 않습니다.계산만 하면 계산이 덤프됩니다.사용한 코드입니까, 아니면 이 질문의 예에 불과합니까?
마지막에 textAreaDoc.insertString(int, String, AttributeSet)을 실행해 보시겠습니까?
안타깝게도 Java는 문자열을 고정 문자열로 분할하는 간단하고 효율적인 방법이 없습니다. 다.String::split
【API】【API】자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자.
String::split
그 , 「컴파일 합니다.」로 컴파일합니다.java.util.regex.Pattern
(입력 시 안전한 문자가 1개만 포함되어 있는 경우는 제외)
★★★★★★★★★★★★★★.Pattern
컴파일된 후 속도가 매우 빠릅니다.따라서 가장 좋은 해결책은 패턴을 미리 컴파일하는 것입니다.
private static final Pattern LINE_SEP_PATTERN = Pattern.compile("\\R");
그런 다음 다음과 같이 사용합니다.
String[] lines = LINE_SEP_PATTERN.split(input);
8, Java 8부터\R
유니코드Java 8 이전 버전에서는 다음과 같은 기능을 사용할 수 있습니다.
Pattern.compile(Pattern.quote(System.lineSeparator()))
String lines[] =String.split( System.lineSeparator())
주어진 모든 솔루션을 기반으로 시도 실패 후.교환하다\n
과 같은트릭이 .에음
article = "Alice phoned\n bob.";
article = article.replace("\\n", " NEWLINE ");
String sen [] = article.split(" NEWLINE ");
나는 질문에 나온 예제를 재현할 수 없었다.하지만 이 논리는 적용될 수 있을 것 같아요.
guava가 있습니다.Splitter
행 등 결과 행에 할 수 .
import com.google.common.base.Splitter;
Iterable<String> split = Splitter.onPattern("\r?\n").trimResults().omitEmptyStrings().split(docStr);
그 결과는 다음과 같습니다.Iterable
어레이가 아닙니다.
마을에 새로 온 소년이 있으니, 당신은 위의 모든 복잡한 일들을 처리할 필요가 없다.JDK 11 이후로는 코드 한 줄만 입력하면 줄이 분할되어 Stream of String이 반환됩니다.
public class MyClass {
public static void main(String args[]) {
Stream<String> lines="foo \n bar \n baz".lines();
//Do whatever you want to do with lines
}}
참고 자료 몇 가지.https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#lines() https://www.azul.com/90-new-features-and-apis-in-jdk-11/
이게 누군가에게 도움이 되었으면 좋겠어요.해피 코딩.
줄 바꿈 설정 및 표시에는 세 가지 규칙이 있습니다(사실상의 표준이라고 할 수 있습니다).
carriage return
+line feed
line feed
carriage return
일부 텍스트 편집기에서 하나를 다른 텍스트 편집기로 교환할 수 있습니다.
입니다.line feed
갈라지는 거야
final String[] lines = contents.replace("\r\n", "\n")
.replace("\r", "\n")
.split("\n", -1);
- 이것이 당신에게 도움이 되었기를 바랍니다.
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");
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]);
}
}
}
언급URL : https://stackoverflow.com/questions/454908/split-java-string-by-new-line
'IT이야기' 카테고리의 다른 글
소품 포함 VueJ 중첩 목록 렌더링 (0) | 2022.07.23 |
---|---|
Sinon은 Vue 이벤트에 의해 트리거된 Vue 컴포넌트 메서드를 어떻게 감시합니까? (0) | 2022.07.19 |
VueX가 어레이 데이터를 상태 그대로 교체합니다. (0) | 2022.07.19 |
Eclipse의 열린 리소스 대화 상자에서 .class 파일을 숨기려면 어떻게 해야 합니까? (0) | 2022.07.19 |
구축과컴파일(Java) (0) | 2022.07.19 |