2012-07-21 19 views

Odpowiedz

33

Petar Ivanov jest odpowiedzią na replace a character at a specific index in a string question

String są niezmienne w Javie. Nie możesz ich zmienić.

Musisz utworzyć nowy ciąg znaków z zastąpionym znakiem.

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

Albo można użyć StringBuilder:

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

System.out.println(myName); 
15

Kay!

Przede wszystkim, gdy mamy do czynienia z łańcuchami, musimy odnieść się do ich pozycji w konwencji 0 bazowej. Oznacza to, że jeśli masz ciąg tak:

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 


Mając to na uwadze, najlepszym sposobem rozwiązania tego problemu jest stworzenie metody, aby zastąpić znak w danej pozycji w łańcuchu jak to :

Metoda:

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

Następnie należy wywołać metodę 'changeCharInPosition' w ten sposób:

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

Jeśli masz jakieś pytania, nie wahaj się, wyślij coś!

+0

Czy to pozwala zastąpić znak niczym (pusty/usunąć)? – trusktr

+0

Co masz na myśli przez nic? Pusty ciąg znaków lub ciąg pustych spacji? – Chicodelarosa

+0

Nie wiem, o czym myślałem. Oczywiście pusty łańcuch "" "może być użyty jako argument do' ch'. – trusktr

11

Aby zastąpić znak w określonym położeniu:

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

Pracowałem dla mnie, aby zastąpić kilka znaków z pozycji. –

10

użytkowania StringBuilder:

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

Jeśli trzeba ponownie użyć ciąg, a następnie użyć StringBuffer:

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

EDIT:

Zauważ, że StringBuffer jest thread-safe, podczas korzystania StringBuilder jest szybszy, ale nie bezpieczny wątku.

Powiązane problemy