Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与正则表达式匹配的Java字符串_Java_Regex_String - Fatal编程技术网

与正则表达式匹配的Java字符串

与正则表达式匹配的Java字符串,java,regex,string,Java,Regex,String,我正在努力解决以下问题 给定一个字符串和正则表达式模式,请给出该模式在字符串中出现的次数。正则表达式符号的含义如下: . - 2 occurrences of the previous character, + - 4 occurrences of previous character, * – more than 5 occurrences of the previous character 示例输入: aaaaaannndnnnnnnfffhfhhgjjjwkkkllclc a. n+

我正在努力解决以下问题

给定一个字符串和正则表达式模式,请给出该模式在字符串中出现的次数。正则表达式符号的含义如下:

. - 2 occurrences of the previous character, 
+ - 4 occurrences of previous character, 
* – more than 5 occurrences of the previous character
示例输入:

aaaaaannndnnnnnnfffhfhhgjjjwkkkllclc
a.
n+
a*
an.
a.d.
5
3
1
1
0
给出了示例输出:

aaaaaannndnnnnnnfffhfhhgjjjwkkkllclc
a.
n+
a*
an.
a.d.
5
3
1
1
0
我的方法是将所有正则表达式转换为普通模式。i、 例如,对于上述示例,我的正则表达式是:

aa
nnnn
aaaaaa
ann
aadd
然后计算发生的次数。但如果输入正则表达式为:

a*d.
请注意,我不能使用任何内置函数,如Pattern.Matches。有什么建议吗


多谢各位

下面是一个解析模式并告诉您输入字符串是否以指定模式开头的方法示例。我没有完成,因为我认为这是一种家庭作业:

boolean startsWithPattern(String pattern, String str) {
    int strPos = 0;
    int patternPos = 0;
    // parse pattern and check input str
    while (patternPos < pattern.length()) {
        char symbol = pattern.charAt(patternPos);
        // TODO this will not work for patterns like `a`, only for `a.`, `b*`, `n+`
        char action = pattern.charAt(patternPos + 1); 
        patternPos += 2;
        switch (action) {
            case '.':
                int end = strPos + 2; // check only two symbols
                for (; strPos < end; ++strPos) {
                    if (str.charAt(strPos) != symbol) {
                        return false; // string don't match
                    }
                }                    
                break;
            case '*':
                // TODO some cycle that would check 5+ positions in str
                break;
            case '+':
                // TODO similar to '.'
                break;
        }
    }
    return true; // string starts with pattern!
}
boolean startsWithPattern(字符串模式,字符串str){
int strPos=0;
int-patternPos=0;
//解析模式并检查输入str
while(patternPos
*
是未绑定的(任何大于5的数字),因此您实际上无法使模式显式,因为
a*
是一组无限的有限字符串。此外,任意重新定义
+
*
的人应该意识到,她可能会造成很多混乱。您是否正在尝试创建新规则?如果无法使用内置函数,将模式转换为“真正的”正则表达式模式有什么好处?您是否可以使用正则表达式来完成此任务?如果给定此规则,您将如何实现正则表达式匹配是一个问题@这是一个面试问题。你可以在这里查一下。我试图通过扩展正则表达式来解决这个问题。只是一种方法。这不是家庭作业问题。您可以在找到我的实现,我相信您还没有解决我的问题。我一直在思考如何解决输入的问题:a*d。您可以使用当前的方法解决模式
a*d.
的问题,但解决方案将非常无效。为模式
a*d.
生成所有“正常模式”,然后在长度为100000的字符串中搜索它们,这似乎非常痛苦(例如)。