2017-02-06 9 views
-1

Я WITE программу, которая тянет за последние шесть символов это мой кодНе изменяйте заменить строку Java

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); 

// Показывать вывод

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

должен быть

New String: S4P6W7M522SC3OXX55K3NN7766123456 

У меня нет идеи, почему заменить неверно

+1

Почему бы просто не использовать подстроку для удаления последнего 6 символов? Пожалуйста, также определите 'Character';) – AxelH

+0

Почему вы предполагаете, что' numberString' составляет 123456? Не могли бы вы сделать вывод 'numberString' и' number' перед заменой? –

ответ

1

Проблема заключается в том, что вы используете массив из 7 символов, если вы проверите длину строки, которую вы создаете (kod) с этим массивом, вы получите 7 символов, поэтому оно не может соответствовать подстроке, пытаясь заменить это только 6 символов. (У вас есть характер 0 в конце (значение, а не число)

Используйте массив 6

char[] chars = new char[6]; 

Чтобы предотвратить эту проблему.


Это немного рискованно если ваша строка короче 32 символов. Вы можете просто прочитать массив с конца и прочитать только 6 символов (или пока не достигнете индекса 0)


Но вы также можете иметь последнюю 6-символьную последовательность в другом месте в строке. Это тоже будет заменить первую последовательность (если вы используете replaceAll()) или только первый с текущим кодом


Использованием подстроки для удаления последнего символа 6 будет проще и безопаснее.

Просто необходимо, чтобы убедиться, что вы будете иметь строки, по крайней мере, 6 характер, хитрость заключается в том, чтобы использовать Math.max:

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

Math.max только даст 0, если строка является коротким.

+0

@Paulina, Помните, что массив примитивов (char/int/double) по умолчанию задал ячейку '0', поэтому ваша строка была похожа на« 6N34M2 »0. – AxelH

+0

@Paulina, не забудьте принять ответ, если он вам подходит. См. [Тур], чтобы узнать, как работает StackOverflow. – AxelH

0

Вот простой подход для решения.

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); 
    } 

}