Java交换字符,但不交换元音

Java交换字符,但不交换元音,java,swap,Java,Swap,我想交换字符串中除元音以外的字符。有很多代码,但是,这是我正在研究的一个,我发现它很容易理解,但这并没有产生预期的结果 public class RandomPractise { //1st find out a vowel public Boolean isVowel(char c) { boolean isV = true; if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u

我想交换字符串中除元音以外的字符。有很多代码,但是,这是我正在研究的一个,我发现它很容易理解,但这并没有产生预期的结果

public class RandomPractise {

    //1st find out a vowel
    public Boolean isVowel(char c) {
        boolean isV = true;
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
            isV = true;
        } else {
            isV = false;
        }
        return isV;
    }

    //Check current and next chars if not vowel do the swap
    public void randomTest() {
        String str = "boat";

        char[] c1 = str.toCharArray();

        for (int i = 0; i < c1.length - 1; i++) {
            if (!(isVowel(c1[i])) && !(isVowel(c1[i + 1]))) {
                char temp = c1[i];
                c1[i] = c1[i + 1];
                c1[i + 1] = temp;
            }
        }
        System.out.println(String.valueOf(c1));
    }

    public static void main(String[] args) {
        RandomPractise r = new RandomPractise();
        r.randomTest();
    }
公共课随机练习{
//首先找出一个元音
公共布尔元音(字符c){
布尔isV=真;
如果(c='a'| c='e'| c='i'| c='o'| c='u'){
isV=真;
}否则{
isV=假;
}
返回isV;
}
//检查当前和下一个字符,如果不是元音,则进行交换
公开测试(){
String str=“船”;
char[]c1=str.toCharArray();
对于(int i=0;i
示例:如果我使用input:boat,我希望看到输出:toab[这不会发生]。当我使用input:sboant时,我看到输出bsoaht


问题:我应该做什么改变才能使它在船上工作

提前感谢您的时间。

问题:我应该做什么更改才能使它在船上工作

你想这么做吗

public class RandomPractise {

    //1st find out a vowel
    public Boolean isVowel(char c) {
        boolean isV = true;
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
            isV = true;
        } else {
            isV = false;
        }
        return isV;
    }

    public void randomTest() {
        String str = "boat";

        char[] c1 = str.toCharArray();
        int n = str.length();
        for (int i = 0; i < n/2; i++) {
            if (!(isVowel(c1[i])) && !(isVowel(c1[n - i - 1]))) {
                char temp = c1[i];
                c1[i] = c1[n - i - 1];
                c1[n - i - 1] = temp;
            }
        }
        System.out.println(String.valueOf(c1));
    }

    public static void main(String[] args) {
        RandomPractise r = new RandomPractise();
        r.randomTest();
    }
公共课随机练习{
//首先找出一个元音
公共布尔元音(字符c){
布尔isV=真;
如果(c='a'| c='e'| c='i'| c='o'| c='u'){
isV=真;
}否则{
isV=假;
}
返回isV;
}
公开测试(){
String str=“船”;
char[]c1=str.toCharArray();
int n=str.length();
对于(int i=0;i
“sb”在[sb]中被替换为“bs”“宣誓”,因为“s”紧挨着“b”。在单词“boat”中,彼此之间没有辅音:“bo”是一对辅音元音,“oa”是元音元音,而“at”是元音辅音。您的程序只交换辅音对,没有这样的辅音对。像
elect
这样的单词,您希望得到什么?遵循什么规则?Yes,这就是我想要的。谢谢。你能解释一下吗!(is元音(c1[n-I-1])这部分吗?我必须等4分钟才能接受。@SheikhRahman实际上,在字符串中获得正好相反的对称字符是一个技巧,例如,如果你有一个长度为7的字符串,那么如果你在索引0处,那么你将得到(n-I-1)作为6,如果你是索引1,那么(n-1-i)将得到5,如果在2,那么(n-1-i)将得到4,如果你是索引3,那么(n-1-i)这是一个快速反转字符串的标准技巧。如果不清楚,请告诉我。如果我错了,请纠正我。我检查了上面的程序,查看了字符串
abcde
其打印的
adcbe
,该字符串不正确,但应该是
acbde
@rahulsharma我刚刚理解了OP对问题的描述n他写道。参见船的例子,在我回答问题后,op确认这是他想要的,因此根据op的要求,abcde的答案应该是“adcbe”而不是“acbde”,尽管我同意op提到问题的方式是含糊不清的。