>  기사  >  Java  >  구분 기호를 유지하면서 문자열을 분할하는 방법은 무엇입니까?

구분 기호를 유지하면서 문자열을 분할하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-24 18:19:03861검색

How to Split Strings Preserving Delimiters?

구분자를 보존한 상태에서 문자열 분할

여러 줄 문자열로 작업할 때 구분자를 사용하여 구성 요소 부분으로 분할해야 하는 경우가 많습니다. 그러나 String.split()의 기본 동작은 구분 기호를 버리고 추출된 텍스트만 남깁니다.

문제:

다음 문자열을 고려하십시오.

(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)

String.split()을 사용하여 이 문자열을 분할하면 다음이 생성됩니다.

  • Text1
  • Text2
  • Text3
  • Text4

원하는 출력:

구분 기호를 유지하고 이에 따라 문자열을 분할하려면 구분 기호를 유지하는 접근 방식이 필요합니다.

해결책 :

JDK는 미리보기 및 뒤돌아보기 정규 표현식(regex) 기능을 사용하여 이를 달성하는 방법을 제공합니다. 작동 방식은 다음과 같습니다.

<code class="java">System.out.println(Arrays.toString("a;b;c;d".split("(?<=;)")));
System.out.println(Arrays.toString("a;b;c;d".split("(?=;)")));
System.out.println(Arrays.toString("a;b;c;d".split("((?<;=;)|(?=;))")));</code>

결과는 다음과 같습니다.

  • [a;, b;, c;, d]
  • [a , ;b, ;c, ;d]
  • [a, ;, b, ;, c, ;, d]

마지막 출력은 원하는 형식과 일치합니다. 각 구분 기호는 유지되고 문자열은 별도의 부분으로 분할됩니다.

정규식 설명:

  • (?<=;): 뒤에서 세미콜론을 찾습니다. 그 앞에 너비가 0인 자리 표시자를 선택합니다.
  • (?=;): 앞에 세미콜론이 있는지 확인하고 그 뒤에 너비가 0인 자리 표시자를 선택합니다.
  • ((?<;= ;)|(?=;)): 세미콜론 앞 또는 세미콜론 뒤의 너비가 0인 자리 표시자와 일치하는 그룹입니다.

이러한 패턴을 결합하여 모든 구분 기호에서 문자열을 효과적으로 분할합니다. 구분 기호 자체를 출력의 일부로 유지합니다.

가독성 향상:

가독성을 높이려면 다음과 같이 명명된 정규식을 사용하는 것이 좋습니다.

<code class="java">static public final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))";

public void someMethod() {
    final String[] aEach = "a;b;c;d".split(String.format(WITH_DELIMITER, ";"));
    ...
}</code>

이렇게 하면 정규식의 설명이 더 명확해지고 유지 관리가 더 쉬워집니다.

위 내용은 구분 기호를 유지하면서 문자열을 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.