IT이야기

새 줄에 의한 Java 문자열 분할

cyworld 2022. 7. 19. 21:09
반응형

새 줄에 의한 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의 클래스.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 #lines()

»JDK11String에는 '''가 .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

반응형