#java
#java
Вопрос:
последний системный вывод не показывает, что строка изменилась, что-нибудь пролетело над моей головой?
Это выполняет поиск позиции определенного символа и удаляет ее из строки:
import java.util.Scanner;
public class Main {
public static int search(String ch, char x) {
int i;
for ( i = 0; i < ch.length(); i ) {
if (ch.charAt(i) == x) {
break;
}
}
return i;
}
public static void decal(int x, String A) {
for (int i = x; i < A.length() -1 ; i ) {
char a = A.charAt(i);
a = A.charAt(i 1);
}
char e = A.charAt(A.length()-1);
e = '';
}
public static void main(String[] args) {
System.out.println("donner une chaine");
String name;
Scanner sc = new Scanner(System.in);
name = sc.nextLine();
char w;
System.out.println("donner un caractere");
w = sc.next().charAt(0);
int val = search(name, w);
System.out.println("la position de la lettre " w " est " val);
decal(val, name);
sc.close();
System.out.println(name);
}
}
Комментарии:
1. Как вы думаете, почему строка должна измениться? Я не вижу никакой инструкции, присваивающей новое значение переменной
name
. Итак, как это могло измениться?2. Побочная проблема: форматирование вашего кода было довольно ужасным. Пожалуйста, поймите, что понять чужой код непросто, и поскольку вы хотите, чтобы мы поняли это и помогли вам, вы действительно не хотите усложнять этот процесс больше, чем это должно быть. Пожалуйста, приложите усилия для публикации хорошо отформатированного кода в будущем. Для этого не требуется много усилий, и это время потрачено не зря, и его высоко ценят участники сайта.
Ответ №1:
На самом деле, вам вообще не нужен decal
метод, вы можете просто использовать метод String.replace() для замены нужного вам символа пустым символом. Например:
public static void main(String[] args) {
char w;
System.out.println("donner une chaine");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
System.out.println("donner un caractere");
w = sc.next().charAt(0);
int val = search(name, w);
System.out.println("la position de la lettre " w " est " val);
name = name.replace(name.charAt(val) "", ""); //replace old character (notice conversion to String) with empty String.
sc.close();
System.out.println(name);
}
После запуска вашего search
метода мы знаем позицию интересующего символа, поэтому мы можем просто использовать метод replace(), чтобы присвоить символ в этой позиции символу для замены, преобразовать его в строку и пустую строку в качестве новой замены. Это даст следующий вывод:
donner une chaine
hello
donner un caractere
e
la position de la lettre e est 1
hllo
Я полагаю, вы надеялись использовать что-то вроде:
name = name.replace(name.charAt(val), '');
Но имейте в виду, что таким образом вы заменяете символ символом ‘ 0’, который будет там (т. Е. это будет ‘h 0llo’), хотя вы не увидите его, когда будете печатать инструкцию из-за приведения к строке, которое происходит в фоновом режиме, и вывод будет выглядеть правильно. Если вы хотите, вы можете легко проверить это, преобразовав измененную строку в charArray и проверив, содержит ли она символ ‘ 0’. Например, простая проверка:
String name1 = name.replace(name.charAt(val), ''); // hllo
String name2 = name.replace(name.charAt(val) "", ""); // hllo
String name3 = name.replace(name.charAt(val) "", ""); // hllo
System.out.print(name1.equals(name2)); //false
System.out.print(name1.equals(name3)); //true
Поэтому я бы рекомендовал использовать первый приведенный метод (с преобразованием в строку).