前提・実現したいこと
javaでスケジュール管理を行うLINEbotを作成しているのですが、予定の登録・確認まではうまくできるようになったのですが、予定の削除を行うことがうまくいきません。
「予定削除」と送信した後に、登録されている予定の内容を送信することで登録されている予定(scheduleListに一つ一つ格納されている)から該当するものを削除するという仕組みにしたいです。しかし、うまく送信した予定を削除することができません。どうすればいいでしょうか?
やりたいこと:
scheduleListに格納されている内容
【scheduleList.get(0)】
2021年09月25日 09:00
バイト
【scheduleList.get(1)】
2021年10月01日
課題
↓
「予定削除」で「バイト」と送信
↓
scheduleListに格納されている内容
【scheduleList.get(0)】
2021年10月01日
課題
該当のソースコード
java
1package com.example.linebot.replier; 2 3 4import java.util.ArrayList; 5import java.util.Collections; 6 7// 予定を追加(記録)&予定リストの表示(『予定確認』から) 8public class MakeList{ 9 public ArrayList<String> scheduleList = new ArrayList<>(); 10 public String Add_schedule; 11 12 public MakeList(){ 13 } 14 15 public void schedule_add(String time,String text){ 16 Add_schedule = (time + "\n " + text); 17 /* 18 * ○年○月○日 ○:○ 19 * 入力された予定(scheduleText.schedule) 20 * 21 * となるように Add_schedule に保存 */ 22 scheduleList.add(Add_schedule); // 予定リストの中に追加(「予定確認」で見られるように) 23 Collections.sort(scheduleList); 24 } 25 26 public String getList(){ 27 String str = "予定リスト????"; 28 for (String ele : scheduleList){ 29 str = (str + "\n\n" + ele); 30 /* 31 * ○年○月○日 ○:○ 32 * 予定 33 * ○年○月○日 ○:○ 34 * 予定 35 * 36 * となるように表示 */ 37 } 38 return str; 39 } 40 41 public String delete(String text){ 42 int i = 0; 43 int de = -1; 44 int f = 0; 45 String str; 46 for(String ele : scheduleList){ 47 // text(送信された内容)が含まれるものを保存 48 if(ele.matches(".*"+ text + ".*")){ 49 de = i; 50 f = 1; 51 } 52 i++; 53 } 54 // textが含まれるものを削除 55 str = scheduleList.get(de); 56 scheduleList.remove(de); 57 //------ 58 for(String ele : scheduleList){ 59 System.out.println(ele); 60 } 61 //------ 62 if(f == 1) { 63 return (str + "\nを削除しました"); 64 } 65 // textの内容の予定が登録されていなければ、何もせずに返信 66 return text + " という予定は登録されていませんでした"; 67 } 68}
java
1package com.example.linebot; 2 3import com.example.linebot.replier.*; 4 5import com.linecorp.bot.model.event.FollowEvent; 6import com.linecorp.bot.model.message.Message; 7import com.linecorp.bot.model.message.TextMessage; 8import com.linecorp.bot.spring.boot.annotation.EventMapping; 9import com.linecorp.bot.spring.boot.annotation.LineMessageHandler; 10import org.slf4j.Logger; 11import org.slf4j.LoggerFactory; 12 13import com.linecorp.bot.model.event.message.TextMessageContent; 14import com.linecorp.bot.model.event.MessageEvent; 15 16//ユーザーの回答に反応 17import com.linecorp.bot.model.event.PostbackEvent; 18 19 20 21@LineMessageHandler //LineBotのコントローラー部 22public class Callback { 23 24 private static final Logger log = LoggerFactory.getLogger(Callback.class); 25 26 public MakeList makeList = new MakeList(); 27 public String texts = "a"; 28 private int flag = 0; 29 30 // フォローイベントに対応する 31 @EventMapping 32 public Message handleFollow(FollowEvent event) { 33 // 実際はこのタイミングでフォロワーのユーザIDをデータベースにに格納しておくなど 34 Follow follow = new Follow(event); 35 return follow.reply(); 36 } 37 38 // 文章で話しかけられたとき(テキストメッセージのイベント)に対応する 39 @EventMapping 40 // MessageEvent<TextMessageContent> は、LineBotに送られたテキスト文章を表すクラス 41 public Message handleMessage(MessageEvent<TextMessageContent> event) { 42 TextMessageContent tmc = event.getMessage(); 43 String text = tmc.getText(); 44 switch (text) { 45 case "やあ": 46 //時間帯に合わせて返信 47 Greet greet = new Greet(); 48 return greet.reply(); 49 case "予定確認": 50 // リッチメニューから送信 51 return new TextMessage(makeList.getList()); 52 case "予定削除": 53 // リッチメニューから送信 54 flag = 1; // flag が 0 の時は予定登録、flag が 1 の時は予定削除 55 return new TextMessage("削除したい予定の内容を送信してください"); 56 default: 57 texts = event.getMessage().getText(); 58 // 予定削除 59 if(flag == 1){ 60 String str = makeList.delete(text); 61 return new TextMessage(str); 62 } 63 64 // 予定登録 65 // 「予定削除」が入力されていない状態で「やあ」「予定確認」以外の文章を送信したらそれは全部予定だということにする 66 // 日付は予定を入力した後にリッチメニューから入力 67 Schedule schedule = new Schedule(event); 68 return schedule.reply(); 69 } 70 } 71 72 // PostBackEventに対応する(ユーザーの回答に反応) 73 @EventMapping 74 public Message handlePostBack(PostbackEvent event) { 75 DialogAnswer dialogAnswer = new DialogAnswer(event,makeList,texts); 76 return dialogAnswer.reply(); 77 } 78}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/12 08:27