gpt4 book ai didi

java - 正则表达式替换java中的特定字符

转载 作者:太空宇宙 更新时间:2023-11-04 13:59:51 25 4
gpt4 key购买 nike

当我使用通用术语(此处称为卫生棉条)时,我试图替换某些情况。

规则:

  1. 我想将“AM”替换为“AN”,“EM”替换为“AN”,IM”替换为“IN”,“OM”替换为“ON”,“UM”替换为“UN”,“YM”替换为“IN”。
  2. 我也想仅在它们后面有辅音(“M”和“N”除外)时替换它们。
  3. 当它们单独存在或位于字符串末尾时,我也只需替换大小写。

我尝试了一些正则表达式,但在测试中仍然遇到一些失败(5/18)。

“UMUMMUM”失败,测试期望“UMUMMUM”,但我得到“UMUMMUN”。

现在这是我的代码:

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;
}
}

最佳答案

如果将 YM 替换为 YN 而不是 IN,则您可以在一行中完成此操作。

tampon.replaceAll("(?<=[AEIOUY])(M)(?![AEIOUYMN])", "N");

由于 YM 到 IN 规则,您将需要使用appendReplacement 和appendTail 来代替。下面的代码使用否定前瞻来确保可能的替换后面不跟元音、M 或 N。如果第一组是 Y,我们将匹配替换为 IN。如果不是,我们使用对组 1 中的字符的反向引用,并在其后跟一个 N。

public class Phonom {
private static final Pattern PATTERN = Pattern.compile("([AEIOUY])(M)(?![AEIOUYMN])");

public static String phonom1(String tampon) {

Matcher m = PATTERN.matcher(tampon);
StringBuffer sb = new StringBuffer();
while (m.find()) {
if ("Y".equals(m.group(1))) {
m.appendReplacement(sb, "IN");
} else {
m.appendReplacement(sb, "\1N");
}
}
m.appendTail(sb);
return sb.toString();
}
}

关于java - 正则表达式替换java中的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29409469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com