在Java中的特定字符之前添加一些字符串

时间:2017-07-26 16:08:41

标签: java string loops character

我想在每个元音之前添加“OB”。 样本输入:“这是一个测试” 样本输出:“THOBIS OBIS OBA TOBEST” 我不知道为什么我的代码不起作用:

public static String obify(String test) {
    int x = 0;
    while (x != -1) {
        if (test.charAt(x) == 'A' || test.charAt(x) == 'E' || test.charAt(x) == 'I' || test.charAt(x) == 'O' || test.charAt(x) == 'U') {
            test = test.replace(test.substring(x, x+1), "ob" + test.substring(x, x+1));
            x += 3;
        } else {
            x++;
        }
        if (x >= test.length() - 1) {
            x = -1;
        }
    }
    return test;
}

4 个答案:

答案 0 :(得分:4)

简单正则表达式的完美场景

String foo = "hEllo what's up?";
String rep = foo.replaceAll("(?i)([aeiou])", "OB$1");
System.out.println(rep);

答案 1 :(得分:0)

你应该替换

test = test.replace(test.substring(x, x+1), "ob" + test.substring(x, x+1));

test = test.substring(0, x) +
        "ob" +
        test.substring(x, x + 1) +
        test.substring(x + 1);

您的问题是replace会对其出现的第一个参数进行操作。

当你有" THOBIS S A TEST"并尝试更换标记的字母,以替换它们"我"信件。之后,在第二个" I"之前将点指向完全错误的位置。迟早你会再次遇到它,情况会重演。

答案 2 :(得分:0)

您的问题出在replace来电。 Documentaion告诉它用新的子串替换每个子串。 所以你的字符串无限增长: 在第一次更换之后是:“THOBIS obIS A TEST” 下一个之后是:“THobobIS obobIS A TEST” 然后“THobobobIS obobobIS A TEST” 等等...

如果您更改了行

test = test.replace(test.substring(x, x+1), "ob" + test.substring(x, x+1));

test = test.substring(0, x) + "ob" + test.substring(x);

它会完成这项工作。

此外,您可以将条件更改为x < test.length()并删除第二个if。

答案 3 :(得分:0)

我认为这样比较容易:对于“ GTREIS”一词: 我基本上会使用元音(包括元音)之前和之后的内容,并将“ OB”附加到第一部分,附加其余部分,最后用修改后的字符串替换原始字符串。

public static String  obify(String s)
{ 
    String inloc ="OB",aux="";
    String start="";
    int n=s.length();
    int i=0;

    while (i<n)
    {
        if(s.charAt(i)=='A'|| s.charAt(i)=='E' || s.charAt(i)=='I' ||     s.charAt(i)=='O'||s.charAt(i)=='U' ){
            inloc ="OB";
            start="";
            aux=s.substring(i);//EIS
            System.out.println(aux);
            start=s.substring(0,i);//GTR
            System.out.println(start);
            start=start+inloc;//GTROB
            System.out.println(start);
            start=start+aux;
            s=start;
            i+=3;// here you have to jump over OBE for example and search the next vowel 
            n+=2;
        } else {
            i++;
        }
    }
    return s;
}