检查字符串是否有四个连续的字母,按升序或降序排列

One*_*neb 4 java regex string automata

美好的一天堆栈溢出.

我是使用正则表达式的菜鸟,这是我的问题 - 如果密码包含4个连续字符,我需要检查密码.到目前为止,我刚刚介绍的是数字.这是我的正则表达式:

升序数字 - ^.?(?:0123 | 1234 | 2345 | 3456 | 4567 | 5678 | 6789).$

降序数字 - ^.?(?:9876 | 8765 | 7654 | 6543 | 5432 | 4321 | 3210).$

这仅适用于数字.我知道这已经是正则表达式的一种矫枉过正,所以我不想用字母来做.如果我这样做,那将是太过分了.

abcdblah //因为abcd而是真的

helobcde //因为bcde是真的

dcbablah //真的是因为dcba

heloedcb //因为edcb而是真的

任何帮助将受到高度赞赏.谢谢stackoverflow.

Mar*_*aux 7

答案很简单:不要使用正则表达式.

使用这种方法:

  • 迭代每个字母(当然,跳过最后一个树字母)
    • 迭代接下来的三个字母并检查升序
      • 如果他们都升序返回真实.
    • 迭代接下来的三个字母并检查降序
      • 如果他们都下降返回假.
  • 返回false

在代码中,这看起来像这样(未经测试的代码):

public boolean checkForAscendingOrDescendingPart(String txt, int l)
{
    for (int i = 0; i <= txt.length() - l; ++i)
    {
        boolean success = true;
        char c = txt.charAt(i);
        for (int j = 1; j < l; ++j)
        {
            if (((char) c + j) != txt.charAt(i + j))
            {
                success = false;
                break;
            }
        }
        if (success) return true;

        success = true;

        for (int j = 1; j < l; ++j)
        {
            if (((char) c - j) != txt.charAt(i + j))
            {
                success = false;
                break;
            }
        }
        if (success) return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

祝好运!
堆栈溢出 :)