2017-02-06 1 views
-1

-I-Programm wite, die die letzten sechs Zeichen diesesErsetzen Sie nicht mit String Java ändern

meinen Code zieht
String numberString; 
int number=123456; 

// convert int to string 
numberString = String.valueOf(number); 
char[] chars = new char[7]; 
String napis = "S4P6W7M522SC3OXX55K3NN77666N34M2"; 
char[] array = napis.toCharArray(); 

// loop which pulls the last six characters 
int index = 0; 
for (int i = 0; i < array.length; i++) { 
    if (i >= 26 && i <= 32) { 
     chars[index] = array[i]; 
     index++; 
    } 

} 

String Str = new String(napis); 
System.out.print("String: " + napis); 
// convert char to string 
String kod = String.valueOf(chars); 
System.out.print("Result " + kod); 
// show new String 
String newString = napis.replace(kod, numberString); 
System.out.print("New String: " + newString); 

// anzeigen Ausgabe

Please write six number 
    123456 
    String: S4P6W7M522SC3OXX55K3NN77666N34M2 
    Result 6N34M2 
    New String: S4P6W7M522SC3OXX55K3NN77666N34M2 

sollte
New String: S4P6W7M522SC3OXX55K3NN7766123456 

Ich habe keine Idee, warum ersetzen ist es ist falsch

+1

Warum nicht einfach substring verwenden, um die letzten 6 Zeichen zu entfernen? Bitte definieren Sie auch 'Character';) – AxelH

+0

Warum nehmen Sie an, dass" numberString "123456 ist? Könnten Sie vor dem Ersetzen eine Ausgabe von 'numberString' und' number' machen? –

Antwort

1

Das Problem ist, dass Sie ein Array von 7 Zeichen verwenden, wenn Sie die Länge der Zeichenfolge, die Sie erstellen (kod) mit diesem Array überprüfen, erhalten Sie 7 Zeichen, so dass es nicht die Teilzeichenfolge übereinstimmen können versuchen, das nur 6 Zeichen zu ersetzen. (Sie haben Charakter von 0 am Ende (der Wert, nicht die Anzahl)

ein Array Verwenden von 6

char[] chars = new char[6]; 

dieses Problem zu vermeiden.


Das ist ein bisschen riskant Wenn Ihr String kürzer als 32 Zeichen ist, können Sie einfach das Array vom Ende lesen und nur 6 Zeichen lesen (oder bis Sie den Index 0 erreichen)


Aber Sie können auch die letzte 6 Character Sequenz irgendwo anders in der Zeichenfolge haben. Das wird die erste Sequenz ersetzen zu (wenn Sie replaceAll()) oder nur die ersten mit dem aktuellen Code


einen Teil Mit den letzten 6 Zeichen zu entfernen wäre einfacher und sicherer.

müssen nur sicher sein, Sie einen String von mindestens 6 Zeichen haben wird, ist der Trick Math.max zu verwenden:

napis.substring(0, Math.max(napis.length() - 6, 0)) + numberString; 

Math.max nur 0 geben wird, wenn der String zu kurz ist.

+0

@Paulina, Denken Sie daran, dass ein Array von Primitiven (char/int/double) die Zelle standardmäßig auf "0" setzt, also war Ihre Zeichenfolge wie "6N34M2" 0 ". – AxelH

+0

@Paulina, vergessen Sie nicht, die Antwort zu akzeptieren, wenn es Ihnen passt. In der [Tour] sehen Sie, wie StackOverflow funktioniert. – AxelH

0

Hier ist der einfache Ansatz für die Lösung.

import java.util.Scanner; 
class replace { 
    public static void main(String args[]) { 
     Scanner s=new Scanner(System.in); 
     int a=s.nextInt(); 
     String aa=Integer.toString(a); 
     String b=s.next(); 
     String bb=b.substring(b.length()-6); 
     System.out.println(aa+" "+bb); 
     String bc=b.replace(bb,aa); 
     System.out.println(bc); 
    } 

}