【问题标题】:Remove duplicate characters from the string [duplicate]从字符串中删除重复字符[重复]
【发布时间】:2018-05-16 06:17:55
【问题描述】:

我有一个加密或解密文件的程序。关键字是用户输入的字符串,但必须删除任何重复的字母。

例如,FEATHER 将变为 FEATHR。

我目前有以下应用程序作为起点,但我不知道如何删除重复的字母。我需要更改或添加什么?

import java.io.File;
import java.io.FileNotFoundException;

import java.io.PrintWriter;

import java.util.Scanner;


public class Average

{

public static void main(String[] args) throws FileNotFoundException

{

    System.out.print("Would you like to encrypt or decrypt. e/d");
    Scanner ed = new Scanner (System.ed);
    String eOrD = ed.next();

    if (eOrD.equals("e"))
    {

        Scanner console = new Scanner(System.in);

        System.out.print("Output File: ");

        String outputFileName = console.next();


        PrintWriter out = new PrintWriter(outputFileName);

        System.out.print("Please enter an encryption key");
        String keyWord = in.next();

【问题讨论】:

  • 那么,您在找到第一个字母 E 方面走了多远?另外,顺便说一下,您只需要一个 Scanner 对象,而 System.ed 不存在
  • 上面的重复链接在这里看起来是一个很好的解决方案。此外,您可以在 UI 级别解决此问题,即阻止用户输入已经输入的字母。这也可能比允许他们输入他们想要的任何内容更直观。
  • 谢谢你说的我会用的

标签: java


【解决方案1】:

您可以使用Set 集合来存储字符序列中的字符,Set 只允许唯一的条目,因此您将是金色的。示例:

@Test
public void setTest(){
  Set<Integer> integerSet = new LinkedHashSet<>();
  integerSet.add(1); // return true, operation successfull
  integerSet.add(2); // return true
  integerSet.add(1); // return false
  asserEquals(2, integerSet.size()); // test is green, passed
}

正如人们在 cmets 和建议中提到的那样,我们需要保持顺序,并不是所有的 Set 实现都这样做。感谢你们。

【讨论】:

  • so you will be golden。除非您使用保留插入顺序的集合,例如LinkedHashSet,否则您将在删除重复项之前删除字母的原始顺序。请参阅重复链接以获得更好的解释。
猜你喜欢
  • 2020-03-30
  • 2012-04-08
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多