2015-05-24 3 views
2

Я пытаюсь поставить свои сообщения в чате, чтобы сделать что-то выглядеть следующим образом:получения подстроки из строки (я получить строку из текстового файла)

enter image description here

Это моя Нитка сообщения:

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); 
      } 

     } 

Я знаю, что у меня проблема с логикой, и это не лучший способ прочитать каждую строку, но я просто хотел, чтобы она работала именно так.

ответ

1

Это должно сработать. Я просто протестировал его.

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); 
       } 
      } 
+0

он работал, но он не показал сообщение, тот, в котором я использовал \ п как часть сообщения (я имею в виду в середине), другими словами, оно не печатать «Véamos си funciona» HTTP : //i57.tinypic.com/ou46mv.png я бы дал вам +1, потому что я забыл о «для каждого», но мне нужно больше очков, чтобы дать +1 –

+0

. Я знаю, что он не показывал «Veamos si funciona», потому что там я не знаю, кто послал это сообщение, поскольку это элемент массива String без имени человека, который его отправил. –

+0

@StevenSalazarMolina Попробуйте это и дайте мне знать, если он работает – Dien