我需要在java中使用正则表达式操作从字符串中删除一个双字母.例如:PRINCEE - > PRINCE APPLE - > APLE
Sea*_*oyd 13
像这样:
final String str = "APPLEE";
String replaced = str.replaceAll("(.)\\1", "$1");
System.out.println(replaced);
Run Code Online (Sandbox Code Playgroud)
输出:
APLE
正如@Jim正确评论,上面匹配任何双字符,而不仅仅是字母.以下是一些只与字母匹配的变体:
// the basics, ASCII letters. these two are equivalent:
str.replaceAll("([A-Za-z])\\1", "$1");
str.replaceAll("(\\p{Alpha})\\1", "$1");
// Unicode Letters
str.replaceAll("(\\p{L})\\1", "$1");
// anything where Character.isLetter(ch) returns true
str.replaceAll("(\\p{javaLetter})\\1", "$1");
Run Code Online (Sandbox Code Playgroud)
供其他参考:
Character.isLetter(ch) (Javadoc中)Character表单中的任何方法都Character.isXyz(char)
可以使用一个名为
\p{javaXyz}(大写字母)的模式.Pattern javadocs中描述了这种机制
\p和
\P构造匹配.\p{prop}
如果输入具有属性prop,则\P{prop}匹配,而如果输入具有该属性则匹配.Pattern javadocs中也描述了这种机制String s = "...";
String replaced = s.replaceAll( "([A-Z])\\1", "$1" );
Run Code Online (Sandbox Code Playgroud)
这可以简单地通过迭代字符串来完成,而不必求助于正则表达式。
StringBuilder ret=new StringBuilder(text.length());
if (text.length()==0) return "";
ret.append(text.charAt(0));
for(int i=1;i<text.length();i++){
if (text.charAt(i)!=text.charAt(i-1))
ret.append(text.charAt(i));
}
return ret.toString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6545 次 |
| 最近记录: |