【问题标题】:getting substrings from a string (i get the string from a text file)从字符串中获取子字符串(我从文本文件中获取字符串)
【发布时间】:2015-08-06 06:15:20
【问题描述】:

我正在尝试将我的消息放入聊天中,以使内容看起来像这样:

这是我的消息字符串:

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

        }

我知道我的逻辑有问题,这不是阅读每一行的最佳方式,但我现在只想让它以这种方式工作。

【问题讨论】:

    标签: java android string substring


    【解决方案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);
                    }
                }
    

    【讨论】:

    • 它有效,但没有显示消息,我在其中使用 \n 作为消息的一部分(我的意思是在中间),换句话说,它没有打印“Veamos si funciona” i57.tinypic.com/ou46mv.png 我会给你+1,因为我忘记了'for each',但我需要更多积分才能给+1
    • 我知道它没有显示“Veamos si funciona”,因为我无法知道是谁发送了该消息,因为它是字符串数组的一项,没有发送者的姓名.
    • 我在 arr.get(i-1)+="\n"+tmp 有一个错误;它说'赋值的左侧必须是一个变量',所以我将其更改为 arr.set(i-1,arr.get(i-1)+"\n"+tmp);但它不起作用
    • @StevenSalazarMolina 我刚刚进行了修复,并在我的计算机上进行了测试。该错误是由类 List 引起的。我通过构造函数 ArrayList(List) 使用了 ArrayList。如果它解决了您的问题,您可以将其标记为答案。
    • @StevenSalazarMolina 列表不支持任何结构修改(即删除或添加元素)。所以我不得不使用一个实现:ArrayList 就是一个例子。您可以通过docs.oracle.com/javase/7/docs/api/java/util/List.html获取更多信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多