ホームページ  >  記事  >  Java  >  区切り文字を保持したまま文字列を分割するにはどうすればよいですか?

区切り文字を保持したまま文字列を分割するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-24 18:19:03925ブラウズ

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]

最後の出力は、目的の形式と一致します。各区切り文字は保持され、文字列は個別の部分に分割されます。

正規表現の説明:

  • (?<=;): 後ろにあるセミコロンを探します。
  • (?=;): セミコロンを先読みし、その後にある幅ゼロのプレースホルダーを選択します。
  • ((?<;= ;)|(?=;)): セミコロンの前またはセミコロンの後の幅ゼロのプレースホルダーに一致するグループ。

これらのパターンを組み合わせることで、区切り文字ごとに文字列を効果的に分割します。区切り文字自体は出力の一部として保持されます。

読みやすさの向上:

読みやすさを向上させるために、次のように名前付き正規表現を使用することを検討してください。

<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。