字符串的最后输出似乎未触动过

问题描述 投票:0回答:1

最后一个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
1个回答
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转换为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)。

© www.soinside.com 2019 - 2024. All rights reserved.