标题:将input字符流中所有符合正则表达式的子串保存到String数组中
只看楼主
usbboy2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:183
注 册:2009-7-31
结帖率:100%
已结贴  问题点数:20 回复次数:2 
将input字符流中所有符合正则表达式的子串保存到String数组中
希望大家提点可以提高效率或是简化代码的建议和思路,我自己的代码如下:
// 将input字符流中所有符合正则表达式的子串保存到String数组中
    static String[] matchResult(String regex, CharSequence input) {
        // 用正则表达式建立Pattern对象的模板
        Pattern p = (regex);
        // Pattern对象方法建立输入流的Matcher匹配器
        Matcher m = p.matcher(input);

        int DEFAULT = 100; // 定义初始String[]大小为DEFAULT
        String str[] = new String[DEFAULT]; // str用来装匹配成功的子串数组
        int time = 0; // time匹配成功次数

        while (m.find()) {
            // 如果str已经装满,则重构一个双倍大小strNew,并把之前的数据利用temp转移过来
            if (time == DEFAULT) {
                DEFAULT = DEFAULT * 2;
                String temp[] = str;
                String strNew[] = new String[DEFAULT];
                for (int i = 0; i < time; i++) {
                    strNew[i] = temp[i];
                }
                str = strNew;
            }

            // 把当前匹配成功的字串拷贝到str中
            
            str[time] = new String(m.group());
            time++;
            
        }
        return str;
    }
[em05

[[it] 本帖最后由 usbboy2009 于 2009-8-1 13:40 编辑 [/it]]
搜索更多相关主题的帖子: input String 正则表达式 字符 保存 
2009-07-31 20:08
家乡的雨
Rank: 2
等 级:论坛游民
帖 子:25
专家分:44
注 册:2009-1-12
得分:14 
仔细看了一下,想问一下楼主,
while (m.find())
{
    // 如果str已经装满,则重构一个双倍大小strNew,并把之前的数据利用temp转移过来
            if (time == DEFAULT/* 这儿是不是应该是DEFAULT-1*/)
            {
                DEFAULT = DEFAULT * 2;
                String temp[] = str;
                String strNew[] = new String[DEFAULT];
                for (int i = 0; i < time; i++) {
                    strNew[i] = temp[i];
                }
                str = strNew;
            }

            // 把当前匹配成功的字串拷贝到str中
            
            str[time] = new String(m.group());
            time++;
            
        }

[[it] 本帖最后由 家乡的雨 于 2009-8-2 09:45 编辑 [/it]]
2009-08-02 09:44
usbboy2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:183
注 册:2009-7-31
得分:0 
拷贝数据用的是 str[time] = new String(m.group());
如果time==DEFAULT-1时候,str[DEFAULT-1]是可以用的 这时候不需要对str扩容
2009-08-02 12:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-281196-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.356969 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved