[解決済み】文字列を分割しても、区切り文字を維持する方法は?
2022-04-17 20:37:46
質問
異なるデリミターで区切られた複数行の文字列があります。
(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)
この文字列を各パーツに分割するには
String.split
しかし、区切り文字正規表現にマッチした実際の文字列を取得することはできないようです。
つまり、こんな感じです。
-
Text1
-
Text2
-
Text3
-
Text4
これは私が欲しいものです
-
Text1
-
DelimiterA
-
Text2
-
DelimiterC
-
Text3
-
DelimiterB
-
Text4
デリミター正規表現を使用して文字列を分割し、かつデリミターを維持するJDKの方法はありますか?
どのように解決するのですか?
正規表現の機能であるlookaheadとlookbehindを使用することができます。
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("((?<=;)|(?=;))")));
そして、手に入れることができます。
[a;, b;, c;, d]
[a, ;b, ;c, ;d]
[a, ;, b, ;, c, ;, d]
最後の1つは、あなたが望むものです。
((?<=;)|(?=;))
の前に空の文字を選択することに等しい。
;
または
;
.
EDITです。
Fabian Steegの可読性に関するコメントは妥当です。正規表現では常に可読性が問題になります。私が正規表現を読みやすくするためにやっていることのひとつは、変数を作って、その変数名がその正規表現が何をするのかを表すようにすることです。プレースホルダーを置くこともできます(例えば
%1$s
) を使用し、Javaの
String.format
を使用して、プレースホルダーを実際に必要な文字列に置き換えることができます。
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, ";"));
...
}
関連
-
[解決済み] トークンのシンタックスエラー、これらのトークンを削除してください [closed].
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] 英数字のランダムな文字列を生成する方法
-
[解決済み] Javaで文字列を分割する方法
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] Javascriptと正規表現:文字列を分割し、セパレータを維持する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] トークンのシンタックスエラー、これらのトークンを削除してください [closed].
-
[解決済み] tempとは何ですか、またjavaにおけるtempの用途は何ですか?
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] 環境変数JAVA_OPTSの使い方を教えてください。
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] 一部の入力ファイルが非推奨のAPIを使用またはオーバーライドしている
-
[解決済み] javascriptでExpression言語を使うには?
-
[解決済み] Javaにおけるシンボリック参照
-
[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]
-
[解決済み] アクティビティに割り当てられない