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