在java中删除字符并替换另一个字符

在java中删除字符并替换另一个字符,java,Java,我试着做两件事: 如果字符串以结尾且辅音在前面,则删除“S” 如果字符位于两个元音之间,则替换字符串中的所有“S” 这是我现在的代码: public class Phonias{ static String[] consonnant={"B","C","D","F","G","H","J","K","L","P","Q","R","S","T","V","W","X","Z"}; static String [] vowels={"A","E","I","O","U","Y

我试着做两件事:

  • 如果字符串以结尾且辅音在前面,则删除“S”
  • 如果字符位于两个元音之间,则替换字符串中的所有“S”
这是我现在的代码:

public class Phonias{

    static String[] consonnant={"B","C","D","F","G","H","J","K","L","P","Q","R","S","T","V","W","X","Z"};
    static String [] vowels={"A","E","I","O","U","Y"};

    public static String phonias1(final String str){

        if (str == null){
            return "null";
        }
        if(str==""){
            return "";
        }
        if (str.contains("S")){

        }
        for (int i = 0; i < consonnant.length; i++) {
            if(str.endsWith(consonnant[i]+"S") && str.length()>3){
                String temp = str.replaceAll(consonnant[i]+"S",consonnant[i]+"");
                return temp;
            }
        }
        for (int i = 0; i < vowels.length; i++) {
            if( str.contains(vowels[i]+"S"+vowels[i])){

                return str.replace("S"+vowels[i], "Z"+vowels[i]);

            }
        }
        return str;

    }
}
公共类语音{
静态字符串[]辅音={“B”、“C”、“D”、“F”、“G”、“H”、“J”、“K”、“L”、“P”、“Q”、“R”、“S”、“T”、“V”、“W”、“X”、“Z”};
静态字符串[]元音={“A”、“E”、“I”、“O”、“U”、“Y”};
公共静态字符串phonias1(最终字符串str){
如果(str==null){
返回“null”;
}
如果(str==“”){
返回“”;
}
如果(str.contains(“S”)){
}
for(int i=0;i3){
字符串temp=str.replaceAll(辅音[i]+“S”,辅音[i]+”);
返回温度;
}
}
for(int i=0;i<元音.length;i++){
if(str.contains(元音[i]+“S”+元音[i])){
return str.replace(“S”+元音[i],“Z”+元音[i]);
}
}
返回str;
}
}

我所有的测试都运行良好,除了“ISISIDORETS”,它返回我“ISISIDORET”。

您在第一个循环中返回
temp
,因此第二个循环永远不会执行。只需更新卫生棉条,并在最后返回即可。像这样:

for (int i = 0; i < consonnant.length; i++) {
    if(tampon.endsWith(consonnant[i]+"S") && tampon.length()>3){
        tampon = tampon.replaceAll(consonnant[i]+"S",consonnant[i]+"");//supprime le "S" final s'il est situé après une consonne
    }
}
for (int i = 0; i < vowels.length; i++) {
    if( tampon.contains(vowels[i]+"S"+vowels[i])){
        tampon = tampon.replace("S"+vowels[i], "Z"+vowels[i]);//si le "S" précède une voyelle, remplacer par "Z" 
    }
}
return tampon;
for(int i=0;i3)和卫生棉条长度(>3){
卫生棉条=卫生棉条.replaceAll(辅音[i]+“S”,辅音[i]+”);//supprime le“S”最后的辅音
}
}
for(int i=0;i<元音.length;i++){
if(卫生棉条包含(元音[i]+“S”+元音[i])){
卫生棉条=棉絮。(S)+元音[I],“Z”+元音[I];
}
}
回棉塞;

我很感激你不是以英语为母语的人,但是
卫生棉条在英语中的含义与在法语中的含义大不相同。当你在一个英语网站上发帖时,一定要记住这一点!旁注:永远不要使用==比较字符串。您可以将空字符串的检查更改为
tampon.isEmpty()
。为了调试您的实际问题-尝试在调试器中运行它;或者打印“returnvaluestosystem.out.”ISISIDORETS“在第一个循环中匹配。不要使用。它用于正则表达式。使用@JonK-出于好奇,它在法语中实际上有两种含义,或者至少足够接近。它可能意味着卫生棉条或缓冲区(还有戳记)(好吧,这很奇怪,我告诉你)。