首页 > 解决方案 > 字符串的最后输出似乎没有改变

问题描述

最后一个 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);
    }
}

标签: java

解决方案


真的,您根本不需要该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');

但请注意,像这样,您将使用将存在的 '\0' 字符替换字符(即它将是 'h\0llo'),尽管在打印语句时您不会看到它,因为转换为后台发生的字符串,输出看起来正确。如果需要,您可以通过将更改的 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

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


推荐阅读