Подтвердить что ты не робот

Java Замените символ на конкретном положении строки?

Я пытаюсь заменить символ в определенной позиции строки.

Например:

String str = "hi";

заменить строку # 2 (i) на другую букву "k"

Как мне это сделать? Благодарю!

4b9b3361

Ответ 1

Петр Иванов ответит на заменить символ по определенному индексу в строковом вопросе

Строка неотменяема в Java. Вы не можете их изменить.

Вам нужно создать новую строку с замененным символом.

String myName = "domanokz";
String newName = myName.substring(0,4)+'x'+myName.substring(5);

Или вы можете использовать StringBuilder:

StringBuilder myName = new StringBuilder("domanokz");
myName.setCharAt(4, 'x');

System.out.println(myName);

Ответ 2

Kay!

Прежде всего, при работе со строками вы должны ссылаться на свои позиции в базовом соглашении 0. Это означает, что если у вас есть такая строка:

String str = "hi";
//str length is equal 2 but the character
//'h' is in the position 0 and character 'i' is in the postion 1


Имея это в виду, лучший способ решить эту проблему - создать метод для замены символа в заданной позиции в строке, подобной этой:

Метод:

public String changeCharInPosition(int position, char ch, String str){
    char[] charArray = str.toCharArray();
    charArray[position] = ch;
    return new String(charArray);
}

Затем вы должны вызвать метод changeCharInPosition таким образом:

String str = "hi";
str = changeCharInPosition(1, 'k', str);
System.out.print(str); //this will return "hk"

Если у вас есть вопросы, не стесняйтесь, напишите что-нибудь!

Ответ 3

Чтобы заменить символ в указанной позиции:

public static String replaceCharAt(String s, int pos, char c) {
   return s.substring(0,pos) + c + s.substring(pos+1);
}

Ответ 4

Используйте StringBuilder:

StringBuilder sb = new StringBuilder(str);
sb.setCharAt(i - 1, 'k');
str = sb.toString();

Ответ 5

Если вам нужно повторно использовать строку, используйте StringBuffer:

String str = "hi";
StringBuffer sb = new StringBuffer(str);
while (...) {
    sb.setCharAt(1, 'k');
}

EDIT:

Обратите внимание, что StringBuffer является потокобезопасным, а использование StringBuilder выполняется быстрее, но не потокобезопасно.