字符串的最后输出似乎未受影响

时间:2019-03-30 12:17:47

标签: java

最后一个sysout不能显示字符串已更改,什么东西飞过我头上?

这会寻找某个字符的位置并将其从字符串中删除:

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 = '\0';
    }

    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 个答案:

答案 0 :(得分:0)

真的,您根本不需要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()方法将该位置处的字符作为要替换的字符,然后将其转换为String ,并将空字符串作为新的替换。这将给出以下输出:

donner une chaine
hello
donner un caractere
e
la position de la lettre e est 1
hllo

我相信您希望使用类似的东西:

name = name.replace(name.charAt(val), '\0');

但是请注意,像这样,您将用出现的'\ 0'字符替换该字符(即它将是'h \ 0llo'),尽管在打印语句时不会看到它由于背景中发生的强制转换为String,因此输出看起来正确。如果需要,可以通过将更改后的String转换为charArray并检查其是否包含'\ 0'字符来轻松地进行检查。例如,简单检查:

    String name1 = name.replace(name.charAt(val), '\0');    // h\0llo
    String name2 = name.replace(name.charAt(val)+"", "");   // hllo
    String name3 = name.replace(name.charAt(val)+"", "\0"); // h\0llo
    System.out.print(name1.equals(name2)); //false
    System.out.print(name1.equals(name3)); //true

因此,我建议使用给定的第一种方法(转换为String)。