这里我试图输入一个字符串,并将字符串字母与辅音字符串字母进行比较。当输入字母和辅音匹配时,输出应打印下一个辅音字母。
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){
}
}
}
答案 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);