正则表达式替换java中的特定字符
当我试着用一个通用的术语来代替卫生棉条时
规则:
- 我想将“AM”替换为“AN”,将“EM”替换为“AN”,将“IM”替换为“IN”,将“OM”替换为“ON”,将“UM”替换为“UN”,将“YM”替换为“IN”李>
- 我还想仅当辅音在它们后面时替换它们,除了“M”和“N”李>
- 我也只需要在它们单独存在或处于字符串末尾时替换case李>
我尝试了一些正则表达式,但仍然有一些失败的测试(5/18)
有“umumum”的faillure测试期望“umumum”,但我有“UMUMMUM”
这是我现在的代码:
public class Phonom {
static String[] consonnant={"B","C","D","F","G","H","J","K","L","P","Q","R","S","T","V","W","X","Z",""};
public static String phonom1(final String tampon){
if (tampon == null){
return "";
}
if (tampon.isEmpty()){
return "";
}
int pos=tampon.indexOf("EM");
int pos1=tampon.indexOf("AM");
int pos2=tampon.indexOf("IM");
int pos3=tampon.indexOf("OM");
int pos4=tampon.indexOf("UM");
int pos5=tampon.indexOf("YM");
if(pos==tampon.length()-2 ||pos1==tampon.length()-2|pos2==tampon.length()-2
||pos3==tampon.length()-2||pos4==tampon.length()-2||pos5==tampon.length()-2){
String temp=tampon.replaceAll("AM","AN");
String temp1=temp.replaceAll("EM","AN");
String temp2=temp1.replaceAll("IM","IN");
String temp3=temp2.replaceAll("OM","ON");
String temp4=temp3.replaceAll("UM","UN");
String result=temp4.replaceAll("YM","IN");
return result;
}
String temp=tampon.replaceAll("AM[^AEIOUMNY]","AN");
String temp1=temp.replaceAll("EM[^AEIOUMNY]","AN");
String temp2=temp1.replaceAll("IM[^AEIOUMNY]","IN");
String temp3=temp2.replaceAll("OM[^AEIOUMNY]","ON");
String temp4=temp3.replaceAll("UM[^AEIOUMNY]","UN");
String result=temp4.replaceAll("YM[^AEIOUMNY]","IN");
return result;
}
}
# 1 楼答案
如果YM替换为YN not in,您可以在一行中完成此操作
由于YM to IN规则,您将需要使用appendReplacement和appendTail。下面的代码使用否定的前瞻性,以确保可能的替换后面没有元音M或N。如果第一组是Y,我们将匹配替换为IN。如果不是,我们使用组1中的角色的反向引用,并在后面加上一个N