有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何删除非索引的特定位置的特定字符?

例如,假设您有字符串“greg”。程序提示您输入要删除的字符,您说“g”,然后程序提示“输入要删除的g(不是索引-1=1、2=2等)”,然后输入“2”。然后程序输出新的句子,即“gre”。这是我的CSCI类程序的一部分,我知道如何使用replace(),但我的教授说我们只能使用循环和这些字符串方法length、concat、+、charAt、substring和equals(或equalsIgnoreCase)。我似乎想不出有什么需要帮忙的。谢谢大家!


共 (2) 个答案

  1. # 1 楼答案

    public static void main(String[] args)  {
        System.out.print("Enter a String : ");
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        System.out.print("Enter character to be removed : ");
        scanner = new Scanner(System.in);
        char character = scanner.next().charAt(0);
        System.out.println("Possible positions of "+character+" : ");
        
        // find all occurrences forward
        for (int i = -1; (i = input.indexOf(character, i + 1)) != -1; i++) {
            System.out.println(i);
        }
        
        System.out.print("Select any above index to remove : ");
        scanner = new Scanner(System.in);
        int index = scanner.nextInt();
        System.out.println("Result : "+input.substring(0, index)+input.substring(index+1, input.length()));
    }
    

    输出

    Enter a String : greg
    Enter character to be removed : g
    Possible positions of g : 
    0
    3
    Select any above index to remove : 0
    Result : reg
    

    输出

    Enter a String : greg
    Enter character to be removed : g
    Possible positions of g : 
    0
    3
    Select any above index to remove : 3
    Result : gre
    
  2. # 2 楼答案

    正如在注释中指出的,您需要维护出现次数的计数,并构建一个跳过第n次出现的新字符串(字符串在Java中是不可变的):

    public static String removeNthCharacter(String input, char ch, int occurence) {
        StringBuilder sb = new StringBuilder();
        int totalOccurences = 0;
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == ch) {
                totalOccurences++;
                if (totalOccurences == occurence) {
                    // Skip This character
                    continue;
                }
            }
            sb.append(input.charAt(i));
        }
        return sb.toString();
    }
    

    我对此进行了测试,它似乎产生了预期的输出:

    public static void main(String[] args) {
        System.out.println(removeNthCharacter("greg", 'g', 2));
        System.out.println(removeNthCharacter("greggggeegeegggg", 'g', 6));
    }
    

    这将产生以下输出:

    src : $ java RemoveChar 
    gre
    greggggeeeegggg