代码之家  ›  专栏  ›  技术社区  ›  Jabroo

在android中,无法使用前缀和后缀从传入消息中提取字符串

  •  0
  • Jabroo  · 技术社区  · 7 年前

    我收到了两种略有不同的格式的消息,如:

    1. “信息:STD Z10 1234567890123 PSSID,SSN:12394847382940398433,结束”

    我可以使用以下方法成功地从第一种格式中提取字符串:

    String message = "Info : STD ID2.7384733928374. PSSID, SSN:324920349023742903, END";
        String prefix1 = "ID";
        String suffix1 = ".";
        String output1 = message.substring(message.indexOf(prefix1) + prefix1.length(), message.indexOf(suffix1));
        Log.d("Output1",  output1);
    String prefix2 = ".";
        String suffix2 = ". PSSID";
        String output2 = message.substring(message.indexOf(prefix2) + prefix2.length(), message.indexOf(suffix2));
        Log.d("Output2", output2);
        // Output2: 7384733928374 (correct)
    
    1. 输出2:7384733928374(正确)

    但无法使用与上述相同的方法从第二种格式中提取:

    String message = "Info : STD Z10 1234567890123 PSSID, SSN:12394847382940398433, END";
    
        String prefix1 = "Z";
        String suffix1 = " ";
        String output1 = message.substring(message.indexOf(prefix1) + prefix1.length(), message.indexOf(suffix1));
        Log.d("Output1",  output1);
    
        String prefix2 = " ";
        String suffix2 = " PSSID";
        String output2 = message.substring(message.indexOf(prefix2) + prefix2.length(), message.indexOf(suffix2));
        Log.d("Output2", output2);
    
    1. 输出1:错误java。lang.StringIndexOutOfBoundsException:长度=65;区域开始=12;区域长度=-8
    2. STD Z10 1234567890123 (错误)正确输出应为1234567890123

    请帮助我如何从第二种格式中提取10和1234567890123?

    2 回复  |  直到 7 年前
        1
  •  1
  •   PRATEEK GHOSH    7 年前

    这是一个解决方案,它肯定会给你带来预期的答案。这个问题我在不同的工具中做过,很抱歉不同的方法语法,但希望答案是正确的。

        String message = "Info : STD Z10 1234567890123 PSSID, SSN:12394847382940398433, END";
    
            String prefix1 = "Z";
            String suffix1 = "0 ";
            String output1 = message.Substring(message.IndexOf(prefix1) + prefix1.Length, message.IndexOf(suffix1)-11);
    
    
    
            String prefix2 = "Z";
            String suffix2 = " PSSID";
            String output2 = message.Substring(message.IndexOf(prefix2) + prefix2.Length+2, message.IndexOf(suffix2)-14);
    
        2
  •  0
  •   Ray Wang    7 年前

        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(message);
    
        matcher.find();
        System.out.println(matcher.group());
        matcher.find(matcher.end());
        System.out.println(matcher.group());