我正在尝试编写代码,以更改输入的字符串中的字符。 这是更改字符时必须遵循的映射。
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);
}
答案 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)
你在这里
您可以将StringBuilder
与setCharAt
方法一起使用,而无需创建太多的字符串,完成后,请使用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。