###前提・実現したいこと
質問失礼いたします。
現在、ユーザー指定の特定の文字で囲んだ文字列を探索し、その部分だけを抜き出しListに格納する
というプログラムを作成しています。
例:
ユーザーからの入力:
<Nukidasi> <Masu>
抜き出す対象(原文):
<Nukidasi>ここに<Masu><Nukidasi>入っているものを抜き出します<Masu>
上記のような感じであれば、
「ここに
入っているものを抜き出します」
という文章が出力されます。
また、もしも指定の文字に囲まれていても何も文字列がなかった場合、例えば
<Nukidasi><Masu>
のような場合は、
「見えない文字が囲まれています」
という文字列が出力されます。
※「特定の文字」は、必ず「<内容>」の形でユーザーから指定、及び原文内に存在するものとします。
と、いった感じで動作するプログラムを正規表現で作ってみてはいるのですが、
正規表現は空文字を無視してしまうという特徴がある(?)ようで二番目の何も文字が囲まれていない場合の
条件を満たすことができません。
下記のようなコードで実現しようとしているのですが、上記の条件を満たすプログラムを作るにはどのようにしたらよいでしょうか。
ご教授お願いいたします。
###発生している問題・エラーメッセージ
none
エラーメッセージ none
###該当のソースコード
Java
1import java.util.ArrayList; 2import java.util.Scanner; 3import java.util.regex.Matcher; 4import java.util.regex.Pattern; 5 6public class Main { 7 public static void main(String[] args) { 8 9 Scanner sc = new Scanner(System.in); 10 String tagA = sc.next(); 11 String tagB = sc.next(); 12 String tagA2 = tagA.replace(tagA, "("); 13 String tagB2 = tagB.replace(tagB, ")"); 14 15 String regex = "\\(" + tagA2 + ".+?" + tagB2 + "\\)"; 16 String target = sc.next().replace(tagA, tagA2).replace(tagB, tagB2); 17 18 ArrayList<String> answer = new ArrayList<String>(); 19 20 Pattern pattern = Pattern.compile(regex); 21 Matcher matcher = pattern.matcher(target); 22 23 while (matcher.find()) { 24 answer.add(matcher.group(1)); 25 } 26 27 for(String a : answer){ 28 29 if(a.length() == 0){ 30 System.out.println("見えない文字が囲まれています"); 31 }else{ 32 System.out.println(a.replace("<", "").replace(">", "")); 33 } 34 } 35 } 36}
###補足情報(言語/FW/ツール等のバージョンなど)
none
回答1件
あなたの回答
tips
プレビュー