在java中更改字符串中的字符

在java中更改字符串中的字符,java,Java,我正在尝试编写一个代码来更改我输入的字符串中的字符。 这是我在更改字符时必须遵循的映射 String letters = "abcdefghijklmnopqrstuvwxyz"; String enc = "kngcadsxbvfhjtiumylzqropwe"; 通过搜索stackoverflow,我发现字符串不能更改,所以我需要使用转换后的字符创建一个新字符串。我的问题是我不知道怎么做。到目前为止,我已经能够访问字符串中的每个字符并打印它们。我知道解决方法是访问每个字符,更改它们,然

我正在尝试编写一个代码来更改我输入的字符串中的字符。 这是我在更改字符时必须遵循的映射

String letters = "abcdefghijklmnopqrstuvwxyz";  
String enc = "kngcadsxbvfhjtiumylzqropwe";
通过搜索stackoverflow,我发现字符串不能更改,所以我需要使用转换后的字符创建一个新字符串。我的问题是我不知道怎么做。到目前为止,我已经能够访问字符串中的每个字符并打印它们。我知道解决方法是访问每个字符,更改它们,然后将它们添加到新字符串中,这是我不知道如何做或查找的

public static void main(String[] args) 
{
int cdcode;

//String letters = "abcdefghijklmnopqrstuvwxyz"; 
//String enc =     "kngcadsxbvfhjtiumylzqropwe";
String myString;
char ch;
int strLen;
int chrPos;
   do
   {

    System.out.println("Enter 1 to encode, 2 to decode, 3 to quit:");

    Scanner myCode = new Scanner(System.in);
    Scanner myText = new Scanner(System.in);

    cdcode = myCode.nextInt();


    switch(cdcode)
    {
        case 1: 
            System.out.println("Enter the text to encode: ");
            myString = myText.nextLine();
            strLen = myString.length();
            System.out.println("String Length is: " +myString.length());

            for(chrPos = 0; chrPos < strLen ;chrPos++)
            {
                System.out.println("The Letters are: " +myString.charAt(chrPos));
                if(myString.charAt(chrPos)== 'S')
                {
                System.out.println("It is an S");
                }
            }
            break;


        case 2:
        System.out.println("Enter the text to decode: ");
        myString = myText.nextLine();
        break;

    }

   }while(cdcode != 3);
}

使用StringBuffer类。创建新的StringBuffer并通过append{char}方法添加字符。添加完所有字符后,通过toString方法将StringBuffer转换为String。

如果我正确理解了您的问题,您可以创建一个包含key=unencoded letter和value=encoded letter的HashMap


通过对照映射中的键检查输入的每个字母,从输入中构建新字符串。使用返回的值生成新字符串。

使用StringBuildermutable。用法:

StringBuilder myString = new StringBuilder(someString);
建议使用StringBuilder,除非对象可以由多个线程修改。如果对象可以由多个线程修改,则使用StringBuffer也可以是可变的。

您可以使用+运算符或+=向新字符串添加字符

这里有一个例子

    String str1 = "abcdef";
    String str2 = "";
    for (int i = 0; i < str1.length(); i++)
        str2 += String.valueOf(str1.charAt(i)).toUpperCase();
    System.out.println(str1 + " ==> " + str2);
给你 您可以将StringBuilder与setCharAt方法一起使用,而无需创建太多字符串,完成后,使用toString方法将StringBuilder转换为字符串

下面是我的作品

 String input = new String("stack overflow");
 StringBuilder decoded = new StringBuilder(input);

 for(int idx = 0 ; idx < decoded.length(); idx++){
   if(letters.indexOf(decoded.charAt(idx)) != -1){
     decoded.setCharAt(idx, enc.charAt(letters.indexOf(decoded.charAt(idx))));
   }
 }
 System.out.println(decoded.toString());

有很多方法可以解决这个问题,但对于学习该语言的人来说,这可能是最容易理解的:

public String encode(String str){

    char[] chars = str.toCharArray();

    StringBuilder builder = new StringBuilder();
    for (Character character : chars){
        char encoded = encodeChar(character);
        builder.append(encoded);
    }
    return builder.toString();
}

public String decode(String str){

    char[] chars = str.toCharArray();

    StringBuilder builder = new StringBuilder();
    for (Character character : chars){
        char decoded = decodeChar(character);
        builder.append(decoded);
    }
    return builder.toString();
}

public char encodeChar(char character){
    ...do the voodoo that you do...
}

public char decodeChar(char character){
    ...undo the voodoo...   
}

在这种情况下,StringBuilder是更好的选择,因为不需要同步;请参见

如果要更改字符串中的特定字符,请使用replaceAll函数

String ss = letters.replaceAll("a","x");
如果要手动检查字符串中的所有字符,然后迭代字符串中的每个字符,对每个字符执行If条件,如果需要更改,则追加新字符,否则使用StringBuilder追加相同的字符


一个简单的开始方法是找到第一个字符串中字母的偏移量,然后用第二个字符串中相同偏移量的字母替换该字母。根据Javadocs,StringBuilder类通常应优先使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步。您好,阿米特,这段代码不起作用,因为我需要能够输入一个中间有空格的字符串。@LearningProgramming更改了我的代码。是从我的手机上收到的吗?如果您发现任何问题,请告诉我。您好,Ammit。contains不工作,它说找不到符号。@学习编程今天我可以设法在笔记本电脑上准备它。给你。谢谢你的回复,哈罗德,但你能详细说明我需要做什么吗。我知道,使用StringBuilder,我现在可以将输入的字符放入StringBuilder中,并操作需要使用for循环的字符,但如何实际将字符与字符串enc进行比较,并将“a”字符更改为“k”字符等等?
String ss = letters.replaceAll("a","x");
StringBuilder br = new StringBuilder();
for (int i = 0; i < letters.length(); i++) {
    if (letters.charAt(i) == 'a') 
        br.append("s");
    else
        br.append(letters.charAt(i));
    }
System.out.println(br.toString());