пожалуйста, объясните, почему здесь важен метод valueOf и есть ли другие альтернативы, кроме использования valueOf ()? - PullRequest
0 голосов
/ 12 июля 2020
public static String obify(String v) {
    //String v = "AEIOU";
    String result = "";
    for(int i=0; i<v.length();i++) {
        String x = String.valueOf(v.charAt(i));

        //if a character in the string is an age,i,o,u, or y,
        // then we insert a "OB" infront of the character.
        // So if your string was ajp, then the output should
        // be obajb. My question is why is the valueof method
        // here important, are there any other alternatives?
            
        if(x.equals("A")|| x.equals("E")|| x.equals("I")|| x.equals("O")|| x.equals("U")|| x.equals("Y")) {       
            result = result + "OB" + x;      
        }  
        else {
            result +=x;
        }
    }
    return result;
}
    

Ответы [ 3 ]

4 голосов
/ 12 июля 2020

valueOf преобразует ваш char в строку. Вам не нужно этого делать. Вы можете сохранить его как char и сравнивать char с другими символами, а не со строками. Символы заключаются в одинарные, а не в двойные кавычки. присутствует в строке.

    ...
    if ("AEIOUY".indexOf(ch) >= 0) {
        result += "OB" + ch;
    }
    ...
2 голосов
/ 12 июля 2020

Вы также можете сделать это намного более кратко с помощью регулярного выражения:

return v.replaceAll("[AEIOUY]", "OB$0");
0 голосов
/ 12 июля 2020

v.charAt () использует значение 'char', и вы используете метод String.valueOf для преобразования значения 'char' в 'строку'. Пожалуйста, обратитесь к java do c. Я думаю, это ответит на ваш вопрос.

Что касается альтернатив, их очень много, но для вашего сценария использование valueOf совершенно нормально, но на самом деле метод valueOf не требуется, если вы реорганизуете его следующим образом;

public static String obify(String v) {

    StringBuilder result = new StringBuilder();
    for (int i = 0; i < v.length(); i++) {
        char charValue = v.charAt(i);
        switch (charValue) {
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U':
            case 'Y':
                result.append("OB").append(charValue);
                break;
            default:
                result.append(charValue);
        }
    }
    return result.toString();
}

Обратите внимание, что объединение строк также не рекомендуется, вместо этого во фрагменте кода выше используется StringBuilder. Кроме того, оператор if был заменен переключателем.

Удачи!

...