首页 > 解决方案 > 如何在字符串中切换字母

问题描述

我正在做一个项目,问题要求我切换数组中的特定字母。例如,a 到 z,b 到 y,c 到 x 等等......

我写了这个:

import java.util.Scanner;
public class Project1
{
public static void main( String [] args )
{
    System.out.println("This program helps to encode or decode some text, the concept is that an A turns into a Z, B into a Y etc.");
    Scanner reader = new Scanner ( System.in );
    System.out.print("What is your message (encoded or not): ");
    String Sentence = reader.nextLine();

    System.out.println();

    System.out.print("Press 1 to encode and 2 to decode: ");
    int Number = reader.nextInt();

    if ( Number == 1)
    {
        Encode (Sentence);
    }
    else if ( Number == 2)
    {
        Decode (Sentence);
    }   
    else
    {
        System.out.println("The number has to be 1 or 2.");
    }
}

public static void Encode (String a)
{
    a = a.replace( 'a' , 'z' );
    a = a.replace( 'b' , 'y' );
    a = a.replace( 'c' , 'x' );
    a = a.replace( 'd' , 'w' );
    a = a.replace( 'e' , 'v' );
    a = a.replace( 'f' , 'u' );
    a = a.replace( 'g' , 't' );
    a = a.replace( 'h' , 's' );
    a = a.replace( 'i' , 'r' );
    a = a.replace( 'j' , 'q' );
    a = a.replace( 'k' , 'p' );
    a = a.replace( 'l' , 'o' );
    a = a.replace( 'm' , 'n' );
    a = a.replace( 'n' , 'm' );
    a = a.replace( 'o' , 'l' );
    a = a.replace( 'p' , 'k' );
    a = a.replace( 'q' , 'j' );
    a = a.replace( 'r' , 'i' );
    a = a.replace( 's' , 'h' );
    a = a.replace( 't' , 'g' );
    a = a.replace( 'u' , 'f' );
    a = a.replace( 'v' , 'e' );
    a = a.replace( 'w' , 'd' );
    a = a.replace( 'x' , 'c' );
    a = a.replace( 'y' , 'b' );
    a = a.replace( 'z' , 'a' );
    System.out.println("Encoded message is: " + a);
}

public static void Decode ( String s)
{
    s = s.replace( 'z' , 'a' );
    s = s.replace( 'y' , 'b' );
    System.out.println("Decoded message is: " + s);
}

}

但是,当我输入一个带有 a 的单词时,它会变成 az,然后又变成 a 。我想知道是否有任何其他方法可以像这样从一个字母切换到另一个字母,这样问题就不会再次发生。

标签: javastring

解决方案


我认为最简单的方法是遍历您的String,分别更改每个字符。在 a 中执行此操作可能是最简单的char[],您可以在最后将其转换回 a String

此外,您不需要单独的encodeanddecode方法,因为编码和解码 aString是完全相同的转换。

public String encode(String toEncode) {
    char[] characters = toEncode.toCharArray();
    for (int index = 0; index < characters.length; index++) {
        if (characters[index] >= 'a' && characters[index] <= 'z') {
            characters[index] = (char)('a' + 'z' - characters[index]);
        }
    }
    return new String(characters);
}

注意char中间的算术,它将转换azbtoy等等。该if条件确保您不会替换任何不是小写字母的字符。


推荐阅读