Java 从字符串获取子字符串(我从文本文件获取字符串)
我正在尝试将我的消息放在聊天中,使其看起来像这样: 这是我的消息字符串:Java 从字符串获取子字符串(我从文本文件获取字符串),java,android,string,substring,Java,Android,String,Substring,我正在尝试将我的消息放在聊天中,使其看起来像这样: 这是我的消息字符串: String messages = "Me said: Hola\n"+ "Steven said: Hola android client\n"+ "Me said: como estas ?\n"+ "Steven said: Yo muy bien y tu?\n"+ "M
String messages = "Me said: Hola\n"+
"Steven said: Hola android client\n"+
"Me said: como estas ?\n"+
"Steven said: Yo muy bien y tu?\n"+
"Me said: bueno si esto funciona me sentire magnifico ;)\n"+
"Me said: ah cierto me olvidaba veamos si dos mensajes seguidos funcionan\n"+
"Steven said: bien\nVeamos si funciona\n"+
"Me said: se xd\n";
我试着让它读每一行:
while(messagesToRead.contains("Me said:") || messagesToRead.contains("Steven said:")){
if(messagesToRead.indexOf("Me said:")==0)
{
// 8 because 'Me said:' size is 8 , -1 because i don't want to read the last \n
String messageToAdd=messagesToRead.substring(8,(messagesToRead.indexOf("Steven said:"))-1);
// if the first @param is false i set it to right
adapter.add(new DataProvider(false,messageToAdd));
messagesToRead = messagesToRead.substring(messageToAdd.length()+9);
}
else if(messagesToRead.indexOf("Steven said:")== 0)
{
// 12 because of 'Steven said:' size
String messageToAdd=messagesToRead.substring(12,messagesToRead.indexOf("Me said:")-1);
adapter.add(new DataProvider(true,messageToAdd));
messagesToRead = messagesToRead.substring(messageToAdd.length()+13);
}
}
我知道我的逻辑有问题,这不是阅读每一行的最佳方式,但我现在只想让它以这种方式工作。这应该可以。我刚测试过
String messagesToRead = "Me said: Hola\n"+
"Steven said: Hola android client\n"+
"Me said: como estas ?\n"+
"Steven said: Yo muy bien y tu?\n"+
"Me said: bueno si esto funciona me sentire magnifico ;)\n"+
"Me said: ah cierto me olvidaba veamos si dos mensajes seguidos funcionan\n"+
"Steven said: bien\nVeamos si funciona\n"+
"Me said: se xd\n";
String[] messages= messagesToRead.split("\n");
ArrayList<String> arr = new ArrayList<String>(Arrays.asList(messages));
messages=null;
String pattern1 = "Me said:";
String pattern2 = "Steven said:";
int size = arr.size(); //you need to have the initial size before processing
// lines you are talking about
for(int i=size-1;i>=0;i--)
{
String str = arr.get(i);
if(str!="" && str.indexOf(pattern1)==-1 && str.indexOf(pattern2)==-1)
{
String tmp = arr.remove(i);
String old =arr.get(i-1) ;
arr.set(i-1,old+"\n"+tmp);
}
}
messages = new String[arr.size()];
messages = arr.toArray(messages);
for(String mess : messages)
{
if(mess!="" && mess.indexOf(pattern2) == 0)
{
/*code here*/
System.out.println(mess);
}
}
String messagesToRead=“我说:你好\n”+
“Steven说:Hola android客户端\n”+
“我说的是:科莫·埃斯塔斯?\n”+
“史蒂文说:你是我的朋友吗?\n”+
“我说:我的功用是巨大的;)\n”+
“我说:啊,这是我的工作职责”+
“史蒂文说:我的职责是”+
“我说:se xd\n”;
String[]messages=messagesToRead.split(“\n”);
ArrayList arr=新的ArrayList(Arrays.asList(messages));
消息=null;
String pattern1=“我说:”;
String pattern2=“史蒂文说:”;
int size=arr.size()//在处理之前,您需要具有初始大小
//你在说什么台词
对于(int i=size-1;i>=0;i--)
{
字符串str=arr.get(i);
如果(str!=“str.indexOf(pattern1)=-1&&str.indexOf(pattern2)=-1)
{
字符串tmp=arr.remove(i);
字符串old=arr.get(i-1);
arr.set(i-1,旧的+“\n”+tmp);
}
}
messages=新字符串[arr.size()];
消息=arr.toArray(消息);
用于(字符串混乱:消息)
{
if(mess!=“”&mess.indexOf(pattern2)=0)
{
/*代码在这里*/
系统输出打印LN(mess);
}
}
它工作了,但没有显示消息,我在消息中使用了一个\n作为消息的一部分(我的意思是在中间),换句话说,它没有打印“Veamos si Functiona”,我会给你+1,因为我忘记了“for each”,但我需要更多的分数来给+1我知道它没有显示什么“Veamos si Functiona”,因为我无法知道是谁发送了该消息,因为它是一个字符串数组项,没有发送该消息的人的姓名。我在arr.get(i-1)+=“\n”+tmp;它说‘赋值的左边必须是变量’,所以我把它改为arr.set(i-1,arr.get(i-1)+“\n”+tmp);但事实并非如此work@StevenSalazarMolina我刚刚做了一个修复,在我的电脑上进行了测试。该错误是由类列表引起的。我通过构造函数ArrayList(List)使用了ArrayList。如果它解决了您的问题,您是否可以将其标记为答案。@StevenSalazarMolina列表不支持任何结构修改(即删除或添加元素)。所以我不得不使用一个实现:ArrayList就是一个例子。您可以通过以下网址获得更多信息: