質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

2125閲覧

Javaでスケジュール管理を行うLINEbot作成をしたいが、予定削除がうまくいかない

nachu_

総合スコア3

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2021/09/11 02:26

前提・実現したいこと

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

LINE BOTの方までは見ていませんが、MakeList#deleteで削除されないのは対象のデータを特定する際のif(ele.matches(".*"+ text + ".*")){の正規表現パターンが悪いようです。データは間に改行\nを挟むので、この場合は

Java

1// NG if(ele.matches(".*"+ text + ".*")){ 2if (ele.matches(".*\n.*"+ text + ".*")) { 3...

とします。ですが、単に「引数textの文字列を含む」データを見つけたいのであれば、String#containsで充分な気もします。その場合、if (ele.contains(text)) { で行けます。

投稿2021/09/11 05:50

dodox86

総合スコア9256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nachu_

2021/09/12 08:27

if (ele.contains(text)){ でうまくいきました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問