2012-11-05 13 views
5

Próbuję pobrać część ciągu z punktu (a, b) i zamienić litery z podanych wartości w łańcuchu na 'X's.Java Zmieniająca część ciągu znaków o określonym znaku

Przykład: jeśli łańcuch jest ABC123 i switch(3,5), zostanie zmieniony na ABCXXX.

Do tej pory mam:

public void switch(int p1, int p2) 
{ 
    String substring = myCode.substring(p1,p2-1); 
} 

Jestem bardzo zagubiony .... dzięki za pomoc!

+0

Przez przypadek, jest to praca domowa? – Azulflame

+0

Czy część XXX lub zwrotne słowo powinno być zdefiniowanym słowem? Czy powinno to zawsze być XXX, a czasem XYZ lub WXY? – Heskja

+0

Nie możesz nazwać swojej metody 'switch'. To jest zarezerwowane słowo kluczowe w Javie –

Odpowiedz

1

Java String s są niezmienne i nie może być zmieniany. Można jednak napisać metodę zwracającą wartość new String z zaznaczonymi znakami. A StringBuilder to dobra klasa do zapoznania się, ponieważ pozwala na szybkie manipulowanie ciągami.

dokumentacja StringBuilder: http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

public class StringReplace { 

    public static String replaceRange(String s, int start, int end){ 
     StringBuilder b = new StringBuilder(s); 

     for(int i = start; i <= end; i++) 
      b.setCharAt(i, 'x'); 

     return b.toString(); 
    } 

    public static void main(String[] args){ 
     String test = "mystringtoreplace"; 
     String replaced = replaceRange(test, 3, 8); 
     System.out.println(replaced); 
    } 

} 
+0

Rozumiem, ale ta metoda dotyczy obiektu, który może mieć tylko dwa parametry (int, int). Podłańcuch, który próbuję zastąpić, pochodzi z obiektu utworzonego w innej klasie. – user1729448

+0

Wygląda na to, że próbujesz zaktualizować referencję, a nie modyfikować rzeczywistego ciągu znaków. W tym przykładzie zamiast tworzyć nowy 'String replace' możesz po prostu zrobić' test = replaceRange (test, 3, 8) 'To zaktualizuje twój odnośnik. Tak więc twoja metoda może po prostu wziąć zmienną 'start' i' end', w której możesz wykonać 'myVar = replaceRange (myVar, start, end);'. – Joe

+0

Dzięki ... Mam go do pracy – user1729448

0

Po prostu wykonaj dwa podciągi dla lewej i prawej części strony (które chcesz zachować), a następnie połącz je z odpowiednią liczbą X pomiędzy.

-1

Spróbuj tego:

public class Sub { 

    public String replaceChar(String str, int x, int y){ 
     String temp = "XXX"; 
     String str1 = ""; 
     str1 = str.substring(x, y+1); 
     str = str.replace(str1, temp); 
     return str; 
    } 

    public static void main(String args[]){ 
     Sub s = new Sub(); 
     System.out.println(s.replaceChar("ABC123", 3, 5)); 
    } 

} 
+0

A) nie tylko daj im kod. dać im narzędzia, których potrzebują, aby wykonać zadanie. B) dokonaj właściwego formatowania pytania ("To jest to, co musisz zrobić, oto jeden sposób, aby to zrobić: * wstaw kod *. Działa to przez * wstawienie opisu *) – Azulflame

+0

Próbowałem i zadziałało i jeśli widzą kod w smal snippet mogą lepiej zrozumieć ... i sformatowałem kod przez ctrl + K i przesłałem ... nie wiem, co jest formatowanie poza tym? – BloodRed

+0

Formatowanie jak w sposobie prezentacji pytania – Azulflame

-1

kilku kroków, które mogą pomóc:

  1. Określić liczbę znaków, które muszą zmienionych
  2. Zidentyfikuj lewą stronę napisu zamierzają zachować (str.substring(0,p1);)
  3. Określ prawą stronę napisu, który chcesz zachować (str.substring(p2,str.length());)
  4. je razem (String output = firstPart + addedChars + secondPart;)
1

Używaj StringBuilder i jego replace(int start, int end, String str) metodę