用字母表中的下一个辅音替换字符串中的辅音

时间:2016-05-04 02:27:03

标签: java

这里我试图输入一个字符串,并将字符串字母与辅音字符串字母进行比较。当输入字母和辅音匹配时,输出应打印下一个辅音字母。

Example:: input = java
         output = kawa  

这里j和v是辅音所以j之后的下一个字母是k,同样在v之后我们有w。

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter any string = ");
String inputString = bf.readLine().toLowerCase();

for(int i=0; i < inputString.length(); i++){
    inputChar = inputString.charAt(i);

    String consonants = "BCDFGHJKLMNPQRSTVWXYZ".toLowerCase();
    for(int j = 0; j < consonants.length(); j++){
        stringChar = consonants.charAt(j);

        if(inputChar == stringChar){
        }  

    }
}

4 个答案:

答案 0 :(得分:3)

其他两个答案会产生正确的输出,但它们效率不高,所以这是我的看法。

您的consonants应该是常量,应该简单地用小写字母表示。作为常量,它应以大写(CONSONANTS)命名。

要进行字符换字符替换,最有效的方法是使用toCharArray()获取原始字符串的char[],修改数组,并使用{{创建新字符串3}}

查找CONSONANTS常量中字母索引的最简单方法是使用new String(char[])方法。

要在向索引添加1时防止溢出,请使用模数运算符(%)。

private static final String CONSONANTS = "bcdfghjklmnpqrstvwxyz";

private static String shiftConsonants(String input) {
    char[] chars = input.toLowerCase().toCharArray();
    for (int i = 0; i < chars.length; i++) {
        int idx = CONSONANTS.indexOf(chars[i]);
        if (idx != -1)
            chars[i] = CONSONANTS.charAt((idx + 1) % CONSONANTS.length());
    }
    return new String(chars);
}

测试:

System.out.println(shiftConsonants("Java")); // prints: kawa

这是保留原始案例的替代解决方案。

private static final String CONSONANTS = "bcdfghjklmnpqrstvwxyz";
private static String shiftConsonants(String input) {
    char[] chars = input.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        char ch = chars[i];
        char lower = Character.toLowerCase(ch);
        int idx = CONSONANTS.indexOf(lower);
        if (idx != -1) {
            char next = CONSONANTS.charAt((idx + 1) % CONSONANTS.length());
            chars[i] = (ch == lower ? next : Character.toUpperCase(next));
        }
    }
    return new String(chars);
}

测试:

System.out.println(shiftConsonants("Java")); // prints: Kawa

indexOf()的后续行动:

  

是否会为每个字符转换为int,然后修改数字并返回或多或少效率?

我的猜测错了。对于小写版本(上面的第一个版本),数字增量为36%更快

private static String shiftConsonants(String input) {
    char[] chars = input.toLowerCase().toCharArray();
    for (int i = 0; i < chars.length; i++) {
        char ch = chars[i];
        if (ch == 'z')
            chars[i] = 'b';
        else if (ch >= 'b' && ch <= 'y' && ch != 'e' && ch != 'i' && ch != 'o' && ch != 'u') {
            ch = (char)(ch + 1);
            if (ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
                ch++;
            chars[i] = ch;
        }
    }
    return new String(chars);
}

如您所见,它已经过优化,甚至不考虑a

答案 1 :(得分:1)

String consonants = "BCDFGHJKLMNPQRSTVWXYZ".toLowerCase();

String inputString = "java";

String retStr = "";

inputString = inputString.toLowerCase();

for(int i=0; i < inputString.length(); i++)
{
     char inputChar = inputString.charAt(i);

     int indexOfCons = consonants.indexOf(inputChar);

     if (indexOfCons != -1)
     {
           indexOfCons++;

           // if the letter is Z, then go around to B
           if (indexOfCons == consonants.length())
           {
                indexOfCons = 0;
           }
           retStr += consonants.charAt(indexOfCons);
     }
     else
     {
           retStr += inputChar;
     }
}
System.out.println(retStr);

输出:

  

卡瓦

答案 2 :(得分:0)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TestIt {

    public static void main(String args[]) throws IOException
    {
        List<Character> consonantList = new ArrayList<Character>();
        consonantList.addAll(Arrays.asList('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'));
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        char[] userInput = bufferedReader.readLine().toLowerCase().toCharArray();
        for(int i=0;i<userInput.length;i++)
        {
            if(consonantList.contains(userInput[i]))
            {
                userInput[i]=consonantList.get((consonantList.indexOf(userInput[i])+1)%21);
            }
        }
        System.out.println(String.valueOf(userInput));
    }
}

答案 3 :(得分:0)

 //declare out side of the loop
 String consonants = "BCDFGHJKLMNPQRSTVWXYZ".toLowerCase();
 //initialize the result
 String op = "";

 for(int i=0; i < inputString.length(); i++){
     inputChar = inputString.charAt(i);
     //find the index of char 
     int index = consonants.indexOf(inputChar);
     //if char 'z' then point to 'b' or to the next char
     op += index==-1 ? inputChar : consonants.charAt(index == consonants.length()-1  ? 0 : index+1);
 }
System.out.println(op);