在程序中假装我的目标是尽可能多地解析字符串中出现的多个"ab"
。我处理这个问题,下面的代码:模式解析Java
public static void main(String[] args)
{
final String expression = "^(\\s*ab)";
Scanner scanner = new Scanner("ab abab ab");
while (scanner.hasNext())
{
String next = scanner.findWithinHorizon(expression, 0);
if (next == null)
{
System.out.println("FAIL");
break;
}
else
{
System.out.println(next);
}
}
}
在表达式的开头插入符号是在每个月初读提到here不允许什么,但空白。这是为了防止像"cab"
或"c ab"
这样的内容被允许。事实上,如果发生这两种情况之一,我会期望返回null并将FAIL打印到控制台。如果我从表达式中删除脱字符,它在输入上工作得非常好,如"ab abab ab"
,但不能返回空值"c ab"
。另一方面,如果我留下插入符号,则"c ab"
将按预期返回空值,但"ab abab ab"
失败。我该如何做这项工作?
编辑
我原来的职位可能已经有点模糊。我上面给出的例子是我真正问题的简单版本。模式ab
是一种填充模式,我会用更有趣的东西替换,比如说email地址正则表达式或者十六进制值。
在我的应用程序中,扫描器的输入不是字符串,而是我不知道的输入流。我在循环中的目标是从输入中逐个读取一个值,并验证它们的内容匹配某种模式。如果他们这样做,那么我可以对他们做一些更有趣的事情。如果不是,那么程序终止。
在上述例子中,我希望AB ABAB AB的输入到输出:
ab
ab
ab
ab
我期望c ab
到输出:
FAIL
和我期望ab cab
到输出:
ab
FAIL
你的目标是有点混乱。如果你想解析“ab”的出现,那么为什么“c ab”不正确?这是一个事件。你是说你想要一个只有2个字符的字符串吗? – 2011-04-15 13:02:33
您能否澄清匹配标准并提供一些样本字符串与预期输出?你提到你想从字符串中解析出'ab'的多次出现,但是你说'cab'和'c ab'不应该匹配。字符串是否只包含字母组合'ab'? – 2011-04-15 13:08:32
立即更新我的帖子。 – LandonSchropp 2011-04-15 13:17:33