Я пытаюсь написать код, изменяющий символы в строке, которую я ввожу. Это отображение, которому я должен следовать при смене персонажей.
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. Создайте new StringBuffer() и добавьте символ с помощью метода append({char}). После добавления всех символов преобразуйте StringBuffer в String с помощью метода toString().
Согласно Javadocs Класс StringBuilder обычно следует использовать вместо этого, поскольку он поддерживает все те же операции, но работает быстрее, так как не выполняет синхронизацию.
Если я правильно понимаю ваш вопрос, вы можете создать HashMap с ключом = незакодированная буква и значением = закодированная буква.
Создайте новую строку из ввода, сравнивая каждую букву этого ввода с клавишами на карте. Используйте возвращенные значения для построения новой строки.
Используйте StringBuilder (изменяемый). Использование:
StringBuilder myString = new StringBuilder(someString);
StringBuilder рекомендуется, если объект не может быть изменен несколькими потоками. Если объект может быть изменен несколькими потоками, используйте StringBuffer (также изменяемый).
Спасибо за ответ, HaroldSer, но не могли бы вы подробнее рассказать о том, что мне нужно сделать. Я понимаю, что с помощью StringBuilder теперь я могу поместить введенные символы в StringBuilder и манипулировать символами, которые мне нужны, чтобы использовать цикл for, но как мне на самом деле сравнить символ со String enc и изменить символ 'a' на 'k 'персонаж и так далее?
вы можете использовать оператор + (или +=) для добавления символов в новую строку.
вот пример
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, не создавая слишком много строк, и после этого преобразовать StringBuilder в String с помощью метода toString().
Ниже работает для меня
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
Привет, Амит, этот код не работает, потому что мне нужно ввести строку с пробелами между ними.
@LearningProgramming Изменил мой код. Это было с моего мобильного телефона, дайте мне знать, если вы заметите какие-либо проблемы.
Привет, Ammit .contains () не работает, он говорит, что не может найти символ.
@LearningProgramming Сегодня мне удалось подготовить его на своем ноутбуке. Ну вот.
Есть много способов решения этой проблемы, но это может быть самым простым для понимания тем, кто изучает язык:
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 - лучший выбор в этом случае, потому что синхронизация не требуется; см. Разница между StringBuilder и StringBuffer)
Если вы хотите изменить характерный символ в строке, используйте функцию replaceAll().
String ss = letters.replaceAll("a","x");
Если вы хотите вручную проверить все символы в строке, а затем перебрать каждый символ в строке, выполните условие if для каждого символа, если требуется изменение, добавьте новый символ, иначе добавьте тот же символ, используя StringBuilder.
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());
Простой способ начать - найти смещение буквы в первой строке, а затем заменить букву буквой с тем же смещением во второй строке.