gpt4 book ai didi

java - Android/Java 算法提取字符串 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:00 25 4
gpt4 key购买 nike

我正在编写一个聊天应用程序。现在我正在尝试保存每次对话的消息。如果用户重新打开特定 Activity ,我希望应用程序加载他已经发送的消息。

我现在的问题如下:

我将对话数据保存在这样的字符串中:

SEND#Hey youRECEIVE#Hi how are you?SEND#I´m fine and you?RECEIVE#=) so am I...

等等。你明白了。

有没有什么方法可以在我称之为“分隔符”SEND# 和 RECEIVE# 之间挑选出消息 fragment ,而不必使用大量的 if 情况?这是我现在的代码:

if(conversation != null){
while(conversation.contains("SEND123")|| conversation.contains("RECEIVE123")){

if(conversation.startsWith("SEND123")){
String rest = conversation.substring(7);
System.out.println("erste if: send: " + rest);

if(rest.contains("SEND123") && rest.contains("RECEIVE123")){
if(rest.indexOf("SEND123")<rest.indexOf("RECEIVE123")){
String messageReady = rest.substring(0, rest.indexOf("SEND123"));
conversation = rest.substring(rest.indexOf("SEND123"));
System.out.println(messageReady);

}

if(rest.indexOf("RECEIVE123")<rest.indexOf("SEND123")){
String messageReady = rest.substring(0, rest.indexOf("RECEIVE123"));
conversation = rest.substring(rest.indexOf("RECEIVE123"));
System.out.println(messageReady);
}

}else{
if(rest.contains("SEND123")){
String messageReady = rest.substring(0, rest.indexOf("SEND123"));
conversation = rest.substring(rest.indexOf("SEND123"));
System.out.println(messageReady);
}
if(rest.contains("RECEIVE123")){
String messageReady = rest.substring(0, rest.indexOf("RECEIVE123"));
conversation = rest.substring(rest.indexOf("RECEIVE123"));
System.out.println(messageReady);
System.out.println("if contains receive: " + conversation);
}
if(!rest.contains("SEND123") || !rest.contains("RECEIVE123")){
conversation = rest;
String messageReady = rest;
System.out.println(messageReady);
}
}

}
if(conversation.startsWith("RECEIVE123")){
String rest = conversation.substring(10);
System.out.println("erste if: receive: " + rest);

if(rest.contains("SEND123") && rest.contains("RECEIVE123")){
if(rest.indexOf("SEND123")<rest.indexOf("RECEIVE123")){
String messageReady = rest.substring(0, rest.indexOf("SEND123"));
conversation = rest.substring(rest.indexOf("SEND123"));
System.out.println(messageReady);

}

if(rest.indexOf("RECEIVE123")<rest.indexOf("SEND123")){
String messageReady = rest.substring(0, rest.indexOf("RECEIVE123"));
conversation = rest.substring(rest.indexOf("RECEIVE123"));
System.out.println(messageReady);
}
}else{
if(rest.contains("SEND123")){
String messageReady = rest.substring(0, rest.indexOf("SEND123"));
conversation = rest.substring(rest.indexOf("SEND123"));
System.out.println(messageReady);
}
if(rest.contains("RECEIVE123")){
String messageReady = rest.substring(0, rest.indexOf("RECEIVE123"));
conversation = rest.substring(rest.indexOf("RECEIVE123"));
System.out.println(messageReady);
}
if(!rest.contains("SEND123") || !rest.contains("RECEIVE123")){
conversation = rest;
String messageReady = rest;
System.out.println(messageReady);
}

}


}
}
}

我还没有完全完成它。我只是想告诉你它的样子。这必须花费大量的运行时间。有没有更简单的方法来区分用户收到的消息和他发送的消息,但保持它们的顺序正确?

也许我必须用不同的方式来解决这个问题。也许将每个对话保存在一个字符串中并不是最好的主意。我打赌你可以帮助我或给我一些提示。

最佳答案

使用小型 SQLite 数据库会更易于管理。你可以有以下列:

  • sequence_num,一个自动递增的整数,唯一标识每条消息
  • remote_id,远程伙伴的标识符
  • direction,一个表示发送与接收的 boolean 标志
  • message,消息正文

您可能还想要:

  • timestmp,消息发送/接收的时间
  • conversation_id,一个自动递增的整数,用于唯一标识每个对话(由您定义)

以及您希望为消息跟踪的任何其他数据。您可能还想添加其他表以保留每个 remote_id 等的关联连接数据。

编辑:

这是一个 official link to using SQLlite on Android 这是一个fairly complete tutorial .

关于java - Android/Java 算法提取字符串 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23437939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com