当前位置: 首页 > 知识库问答 >
问题:

如何在不是索引的某个位置移除某个字符?

云曦之
2023-03-14

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

共有2个答案

松嘉运
2023-03-14
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
韩乐湛
2023-03-14

正如在注释中指出的,您需要维护出现次数的计数,并构建一个跳过第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
 类似资料:
  • 我正在创建一个程序,它接受用户输入并生成一张去音乐会的门票。为此,在其中一个文本字段中,用户输入他的全名。然后程序获取文本字段的内容并将其设置为字符串音乐会观众。为了获取用户的首字母,我使用String Tokenizer将音乐会观众拆分为firstName、middleName和lastName字符串,然后使用子字符串从每个字符串中获取第一个字母。 我希望程序能够处理例外情况,如果用户只在文本字

  • 问题内容: 如果我有一个字节,该方法将如何在某个位置取回一个位? 这是我所知道的,我认为它不起作用。 我要从中检索信息的字节的名称在哪里。 问题答案: 按位置向右移动ID将使#position位在数字中最靠右的位置。将其与按位与1结合将告诉您是否设置了该位。

  • 问题内容: 我有一个像这样的numpy数组: 如何一步一步获取特定索引位置的值?例如: 结果应为: 问题答案: 只是索引使用你

  • 问题内容: 我有10 秒之一。如何用另一个值更新索引? 问题答案: 让是和新的,那么就这样做: 可以在此处的Java api参考中找到。

  • 问题内容: 我的页面上有一张表格,其中应该包含某个元素。我可以通过表名(具有唯一的名称)来标识表,并且还可以轻松地标识元素。我想断言元素存在于表的row ,column 上。使用Selenium命令最干净的方法是什么? 备注: 我不想使用除表名以外的其他内容来查找它(我不希望代码中的所有内容)。 我在PHPUnit中使用Selenium。因此,我可以将PHP逻辑用于该任务,尽管我不希望任何复杂的逻

  • 为什么我会得到异常,我如何访问某些字符串中的某些字符位置?