例子:{123.jpg}234{235.bmp}123{f_1.gif}1,该字符串代表用户接受的信息。
2,{xxx.jpg}代表接受到的是自定义图片(后缀jpg、png、gif、bmp);{f_1.gif}代表系统表情(f_开头);其他的代表文字信息。
3,要将系统表情与文字信息取出来作为一个单独的字符串,比如上面的将取出为234123{f_1.gif};自定义表情将单个单个的取出,分别作为字符串,比如上面的字符串将取出为{123.jpg}、{235.bmp};
4,现在的想法是写一个函数,传入处理前的字符串后,返回一个数组,索引[0]代表文字加系统表情,索引[1]、[2]...代表每一个自定义表情,最终返回如下
new String[]{ "234123{f_1.gif}", "{123.jpg}", "{235.bmp}"};
5,这个算法应该怎么写,求达人,谢谢。

解决方案 »

  1.   

    能否假定你所有“自定义图片”都是以数字开头的?否则你很难跟系统表情严格区分开来。算法思路如下,先用正则表达式将所有的自定义图片检索出来,然后再将其从主字符串中全部过滤掉。
        public static void main(String[] args) {
            String src = "xxx{f_222.gif}{123.jpg}3234{235.bmp}12f3{f_0.gif}fddd";
            String[] results = splitMessage(src);
            for (int i = 0; i < results.length; i++) {
                System.out.println(results[i]);
            }
        }    public static String[] splitMessage(String source) {
            
            Pattern pattern = Pattern.compile("([{]\\d+\\.\\D{3}[}])");
            Matcher matcher = pattern.matcher(source);        ArrayList<String> lstTemp = new ArrayList<String>();
            while (matcher.find()) {
                String pic = matcher.group();
                lstTemp.add(pic);
                source = source.replace(pic, "");
            }
            lstTemp.add(0, source);
            
            return (String[]) lstTemp.toArray(new String[0]);        
        }
    显示结果:
    xxx{f_222.gif}323412f3{f_0.gif}fddd
    {123.jpg}
    {235.bmp}