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

时间:2018-10-05 01:48:39

标签: java

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

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);
}

7 个答案:

答案 0 :(得分:2)

使用StringBuilder(mutable)。用法:

StringBuilder myString = new StringBuilder(someString);
除非可以通过多个线程修改对象,否则建议使用

StringBuilder。如果该对象可以被多个线程修改,则使用StringBuffer(也是可变的)。

答案 1 :(得分:2)

如果要更改字符串中的特殊字符,请使用replaceAll()函数。

String ss = letters.replaceAll("a","x");

如果要手动检查字符串中的所有字符,然后遍历字符串中的每个字符,请对每个字符执行if条件,如果需要更改,请追加新字符,否则使用{{1 }}。

StringBuilder

答案 2 :(得分:0)

如果我正确理解了您的问题,则可以使用key = unencoded字母和value = encoded字母创建HashMap。

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

答案 3 :(得分:0)

您可以使用+运算符(或+=)将字符添加到新字符串中。

这是一个例子

    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);

答案 4 :(得分:0)

你在这里 您可以将StringBuildersetCharAt方法一起使用,而无需创建太多的字符串,完成后,请使用toString()方法将StringBuilder转换为String

以下为我工作

 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());

\\Input
\\String input = new String("stack overflow");

\\Output
lzkgf iraydhio

答案 5 :(得分:0)

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

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是更好的选择,因为不需要同步;请参见Difference between StringBuilder and StringBuffer

答案 6 :(得分:-1)

使用StringBuffer类。创建new StringBuffer()并通过append({char})方法添加字符。附加所有字符后,可通过toString()方法将StringBuffer转换为String。