Я пытаюсь заменить символ в определенной позиции строки.
Например:
String str = "hi";
заменить строку # 2 (i) на другую букву "k"
Как мне это сделать? Благодарю!
Я пытаюсь заменить символ в определенной позиции строки.
Например:
String str = "hi";
заменить строку # 2 (i) на другую букву "k"
Как мне это сделать? Благодарю!
Петр Иванов ответит на заменить символ по определенному индексу в строковом вопросе
Строка неотменяема в 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);
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"
Если у вас есть вопросы, не стесняйтесь, напишите что-нибудь!
Чтобы заменить символ в указанной позиции:
public static String replaceCharAt(String s, int pos, char c) {
return s.substring(0,pos) + c + s.substring(pos+1);
}
Используйте StringBuilder
:
StringBuilder sb = new StringBuilder(str);
sb.setCharAt(i - 1, 'k');
str = sb.toString();
Если вам нужно повторно использовать строку, используйте StringBuffer:
String str = "hi";
StringBuffer sb = new StringBuffer(str);
while (...) {
sb.setCharAt(1, 'k');
}
EDIT:
Обратите внимание, что StringBuffer является потокобезопасным, а использование StringBuilder выполняется быстрее, но не потокобезопасно.