简体   繁体   English

用自定义字母替换字符串中的字符

[英]Replace characters in string with a custom alphabet

I have written this code that replaces the characters in a string with a custom supplied alphabet: 我编写了这段代码,用自定义提供的字母替换字符串中的字符:

//Replaces characters in string with custom alphabet.
public static String getStringWithCustomAlphabet(String string, String customAlphabet){
    String shiftedString = "";

    //Loop through every character in @plainText
    for (int i = 0; i < string.length(); i++) {

        //Store current character of loop in @charToAdd
        char charToAdd = string.charAt(i);

        int index = getAlphabet().indexOf(charToAdd);

        //If index is valid
        if (index != -1) charToAdd = customAlphabet.charAt(index);

        //Add the character to @cipherText
        shiftedString += charToAdd;
    }

    return shiftedString;
}

public static String getAlphabet() {
    return "abcdefghijklmnopqrstuvwxyz ";
}

This code works. 此代码有效。 However, I want to be able to use not only a String alphabet but an integer alphabet. 但是,我希望不仅可以使用字符串字母,而且可以使用整数字母。 So, for example: 因此,例如:

int[] numberArray {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26};
getStringWithCustomAlphabet("abcxyz", numberArray); //Should return 0,1,2,23,24,25

Maybe there is some way to simply this code and not use a for loop? 也许有某种方法可以简化此代码,而不使用for循环?

For lower case use this : 对于小写字母,请使用:

String str = "abcdef";
char[] ch  = str.toCharArray();
for (char c : ch) {
   int temp = (int) c;
   int temp_integer = 96; //for lower case
   if (temp <= 122 & temp >= 97)
      System.out.print(temp-temp_integer);
}

Output will be -:123456 输出将是-:123456

For Upper case : 对于大写:

String str = "DEFGHI";
char[] ch  = str.toCharArray();
for (char c : ch) {
   int temp = (int) c;
   int temp_integer = 64; //for upper case
   if (temp <= 90 & temp >= 65)
      System.out.print(temp-temp_integer);
}

Output Will be -:456789 输出将是-:456789

Strategy pattern may save you a lot of time and give you maximum flexibility. 策略模式可以为您节省大量时间,并为您提供最大的灵活性。 Suppose that we define an AlphabetConverter interface, as: 假设我们定义一个AlphabetConverter接口,如下所示:

@FunctionalInterface
interface AlphabetConverter {
    String convert(char ch);
}

Then, define the convertAlphabet method accepting an AlphabetConverter , as: 然后,将接受AlphabetConverterconvertAlphabet方法定义为:

public String convertAlphabet(String actual, AlphabetConverter converter) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < actual.length(); i++) {
        sb.append(converter.convert(actual.charAt(i)));
    }
    return sb.ToString();
}

Now, you can implement AlphabetConverter , one for replacement with String alphabet, and one for int array, or even use a lambda function. 现在,您可以实现AlphabetConverter ,一个用于替换String字母,一个用于int数组,甚至使用lambda函数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM