我有一个代码,可以做这样的事情:
while (doorIsLocked()) {
knockOnDoor();
}
openDoor();
Run Code Online (Sandbox Code Playgroud)
但我想礼貌,在打开它之前总是敲门.我可以这样写:
knockOnDoor();
while (doorIsLocked()) {
knockOnDoor();
}
openDoor();
Run Code Online (Sandbox Code Playgroud)
但我只是想知道是否有更好的成语不重复陈述.
我有这个功课问题,我需要使用正则表达式删除字符串中的所有其他字符.
在一个部分中,我必须删除索引1,3,5处的字符,...我已按如下方式执行此操作:
String s = "1a2b3c4d5";
System.out.println(s.replaceAll("(.).", "$1"));
Run Code Online (Sandbox Code Playgroud)
这打印12345出我想要的东西.基本上我一次匹配两个字符,并替换为第一个字符.我使用群组捕获来做到这一点.
问题是,我在作业的第二部分遇到问题,我需要删除索引0,2,4处的字符,...
我做了以下事情:
String s = "1a2b3c4d5";
System.out.println(s.replaceAll(".(.)", "$1"));
Run Code Online (Sandbox Code Playgroud)
这打印abcd5,但必须正确答案abcd.如果输入字符串长度为奇数,则我的正则表达式只是不正确.如果它是偶数,那么我的正则表达式工作正常.
我想我真的很接近答案,但我不确定如何解决它.
感谢我以前的作业问题的帮助Regex to match tags like <A>, <BB>, <CCC> but not <ABC>,但现在我有另一个功课问题.
我需要匹配标签<LOL>,<LOLOLOL>(3个大写字母,最后两个字母可重复),但不是<lol>(需要大写).
使用以前的作业技术,我试过<[A-Z]([A-Z][A-Z])\1*>.这是有效的,除了还有一个额外的问题:重复部分可以是大小写混合!
所以我还需要匹配<LOLolol>,<LOLOLOlol>因为它是3个大写字母,在大小写混合的情况下可重复的最后两个字母.我知道你可以创建一个不区分大小写的模式/i,这将让我与我<LOLolol>的正则表达式匹配,但它现在也匹配<lololol>,因为前3个字母的检查也不区分大小写.
那我该怎么做?如何敏感地检查前三个字母,然后其他字母不区分大小写?正则表达式可以实现吗?
我需要一个正则表达式匹配的标签,看起来像<A>,<BB>,<CCC>,但不<ABC>,<aaa>,<>.所以标签必须由相同的大写字母组成,重复.我试过了<[A-Z]+>,但那不起作用.当然我可以写类似的<(A+|B+|C+|...)>等等,但我想知道是否有一个更优雅的解决方案.