Java 所以我需要找到字符串中的所有元音,并使用循环替换它们

Java 所以我需要找到字符串中的所有元音,并使用循环替换它们,java,loops,Java,Loops,所以我有这个,并且知道我只使用简单的方法,比如toString(),charAt。现在我的代码只是返回原始字符串,我不知道为什么 好的,所以我意识到在一些测试之后,它返回原始字符串的原因是因为在循环中的嵌套if语句中,条件永远不会为true,所以它绕过if语句。为什么从来都不是真的 System.out.print("Enter in a string: "); String userInput = scan.nextLine();//string user e

所以我有这个,并且知道我只使用简单的方法,比如toString(),charAt。现在我的代码只是返回原始字符串,我不知道为什么

好的,所以我意识到在一些测试之后,它返回原始字符串的原因是因为在循环中的嵌套if语句中,条件永远不会为true,所以它绕过if语句。为什么从来都不是真的

        System.out.print("Enter in a string: ");

        String userInput = scan.nextLine();//string user enters

        String vowelChar;//individual character within user's input

        for (int i=0; i<userInput.length(); i++){

            Character indChar = userInput.charAt(i);

            vowelChar = indChar.toString();

            if (vowelChar=="a" || vowelChar=="e" || vowelChar=="i" || vowelChar=="o" || vowelChar=="u"){
                String beforeText = userInput.substring(0, i-1);//string before vowel
                String afterText = userInput.substring(i+1);//string after vowel
                userInput=beforeText+"_"+afterText;
            }else{
                //character is not a vowel
                //do nothing
            }
        }
        System.out.print(userInput);
    }
}
System.out.print(“输入字符串:”);
字符串userInput=scan.nextLine()//字符串用户输入
字符串元音//用户输入中的单个字符
对于(int i=0;i
所以使用equals而不是==


因此,使用equals而不是==

需要考虑以下几点:

  • 比较字符串时不要使用“==”,如中所述: 您可以将字符与“==”进行比较,因此不需要将其转换为字符串进行比较

  • for循环中的索引从0开始,因此以下语句:

    String beforeText=userInput.substring(0,i-1)

    如果第一个索引中有元音,将抛出java.lang.StringIndexOutOfBoundsException

  • 如果你没有在里面做任何事情,你就不需要“else”案例

  • 虽然这不是我实现您想要的循环的方式,但这里有一个解决方案,它可以对原始代码进行最少的更改:

            System.out.print("Enter in a string: ");
    
            String userInput = scan.nextLine();//string user enters
    
            for (int i = 0; i < userInput.length(); i++) {
    
                Character indChar = userInput.charAt(i);
    
                if (indChar == 'a' || indChar == 'e' || indChar == 'i' || indChar == 'o' || indChar == 'u' ||
                        indChar == 'A' || indChar == 'E' || indChar == 'I' || indChar == 'O' || indChar == 'U') {
                    String beforeText = userInput.substring(0, i); //string before vowel
                    String afterText = userInput.substring(i + 1);  //string after vowel
                    userInput = beforeText + "_" + afterText;
                }
            }
            System.out.print(userInput);
    
    System.out.print(“输入字符串:”);
    String userInput=scan.nextLine();//字符串用户输入
    对于(int i=0;i
    需要考虑的几件事:

  • 比较字符串时不要使用“==”,如中所述: 您可以将字符与“==”进行比较,因此不需要将其转换为字符串进行比较

  • for循环中的索引从0开始,因此以下语句:

    String beforeText=userInput.substring(0,i-1)

    如果第一个索引中有元音,将抛出java.lang.StringIndexOutOfBoundsException

  • 如果你没有在里面做任何事情,你就不需要“else”案例

  • 虽然这不是我实现您想要的循环的方式,但这里有一个解决方案,它可以对原始代码进行最少的更改:

            System.out.print("Enter in a string: ");
    
            String userInput = scan.nextLine();//string user enters
    
            for (int i = 0; i < userInput.length(); i++) {
    
                Character indChar = userInput.charAt(i);
    
                if (indChar == 'a' || indChar == 'e' || indChar == 'i' || indChar == 'o' || indChar == 'u' ||
                        indChar == 'A' || indChar == 'E' || indChar == 'I' || indChar == 'O' || indChar == 'U') {
                    String beforeText = userInput.substring(0, i); //string before vowel
                    String afterText = userInput.substring(i + 1);  //string after vowel
                    userInput = beforeText + "_" + afterText;
                }
            }
            System.out.print(userInput);
    
    System.out.print(“输入字符串:”);
    String userInput=scan.nextLine();//字符串用户输入
    对于(int i=0;i
    不要转换回字符串并与
    =
    进行比较(因为我们通过
    Object#equals
    比较字符串的值),而是使用if/switch使用
    char
    类型进行比较。此外,您应该在单个大小写中进行比较,以免
    a
    a
    不匹配

    char c = Character.toLowerCase(userInput.charAt(i)); //make the character lowercase
    switch (c) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            //replace vowel
            break;
    }
    

    不要转换回字符串并与
    =
    进行比较(因为我们通过
    Object#equals
    比较字符串的值),而是使用if/switch使用
    char
    类型进行比较。此外,您应该在单个大小写中进行比较,以免
    a
    a
    不匹配

    char c = Character.toLowerCase(userInput.charAt(i)); //make the character lowercase
    switch (c) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            //replace vowel
            break;
    }
    

    无需转换为
    字符串
    。直接比较字符

    Character indChar = userInput.charAt(i);
    if ((vowelChar == 'a' || vowelChar == 'e' || vowelChar == 'i' || vowelChar=='o' || vowelChar=='u') {
        // ...
    }
    

    请注意,字符是单引号而不是双引号

    无需转换为
    字符串
    。直接比较字符

    Character indChar = userInput.charAt(i);
    if ((vowelChar == 'a' || vowelChar == 'e' || vowelChar == 'i' || vowelChar=='o' || vowelChar=='u') {
        // ...
    }
    

    注意单引号中的字符,而不是双引号

    if (vowelChar.equals("a") || vowelChar.equals("e") || vowelChar.equals("i") || vowelChar.equals("o") || vowelChar.equals("u")){
    


    像这样更改代码

    if (vowelChar.equals("a") || vowelChar.equals("e") || vowelChar.equals("i") || vowelChar.equals("o") || vowelChar.equals("u")){
    


    不,只是将字符作为字符进行比较,而不是将其转换为字符串。@Robert Agree,我只是指出他使用==比较字符串所犯的错误。不,只是将字符作为字符进行比较,而不是将其转换为字符串。@Robert Agree,我只是指出他使用==比较字符串所犯的错误,这是一个错误陆上通信线。