【问题标题】:Remove duplicates numbers above 10 in a String [duplicate]删除字符串中大于 10 的重复数字 [重复]
【发布时间】:2024-01-23 02:13:01
【问题描述】:

我制作了一个程序,可以在按下按钮时删除字符串中的重复字符。例如,如果字符串为“23332”,则输出为“23”。现在我的问题是,这实际上不适用于 10 以上的数字。如果字符串为“10”,则程序将其视为 1 和 0,而不是 10。是否有可能以某种方式标记该数字,以便程序知道它是10 而不是 1 和 0?提前致谢。这是我的代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class test extends JFrame implements ActionListener {

    private JPanel panel;
    private JLabel label;
    private JButton ok;
    private String str;

    public test() {

        panel = new JPanel();

        ok = new JButton("OK");
        ok.addActionListener(this);

        str = "10, 11, 12, 13, 10";
        label = new JLabel(str);

        panel.add(ok);
        panel.add(label);

        add(panel);

        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        }

    public static void main(String[] args) {
        new test();        
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {

        String temp="";
        HashMap<Integer,Character> tc = new HashMap<Integer,Character>();
        char [] charArray = str.toCharArray();
        for (Character c : charArray)
        {
            if (!tc.containsValue(c))
                {
                    temp=temp + c.toString() + ", ";
                    tc.put(c.hashCode(),c);
                 }
        }
        label.setText(temp);
    }
}

编辑:

    String temp = "";
    HashMap<Integer,Character> tc = new HashMap<Integer,Character>();
    String[] strArray = str.split(",");

    for(String string : strArray) {
        char [] charArray = string.toCharArray();
            for (Character c : charArray)
            {
                if (!tc.containsValue(c))
                    {
                        temp=temp + c.toString() + ", ";
                        tc.put(c.hashCode(),c);
                     }
            }
        }
            label.setText(temp);

【问题讨论】:

  • 用逗号分割字符串 (*.com/questions/3481828/…),修剪每个块,并将它们解析为 Int (Integer.parseInt),并保留一组 Integer 以记住您看过哪个。
  • 不,程序怎么可能知道您的意思是“45”还是“4”和“5”?解决这个问题的唯一方法是添加一个分隔符(就像你在字符串"10, 11, 12, 13, 10" 中一样),然后将每个数字存储在int 数组而不是char 数组中。
  • 你有上限吗?
  • 尽管提到了按钮和 GUI 的存在,但这确实不是与 GUI 或 swing 标签相关的问题。事实上,您可以而且应该在命令行应用程序中解决此类问题。在 GUI 中尝试之前。

标签: java string char duplicates


【解决方案1】:

假设您使用, 之类的分隔符,您可以使用String.split() 方法,该方法为您提供一个字符串数组并循环遍历所有这些字符串,这是您需要的代码:

String[] strArray = str.split(",");
for(String string : strArray) {
char [] charArray = string.toCharArray();
    for (Character c : charArray)
    {
        if (!tc.containsValue(c))
            {
                temp=temp + c.toString() + ", ";
                tc.put(c.hashCode(),c);
             }
    }
}

编辑:

如果您需要检查大于 10 的数字是否重复,您需要使用 Integer.parseIn() 解析字符串值并将您的 Map 从 HashMap&lt;Integer,Character&gt; 更改为 HashMap&lt;Integer,String&gt;,代码如下:

String[] strArray = str.split(",");
for(String string : strArray) {
   if (!tc.containsValue(string)) {
          temp=temp + string + ", ";
          tc.put(Integer.parseIn(string), string);
   }
}

【讨论】:

  • 好..!我也会在第一行添加这个 str=str.replaceAll("\\s","");
  • @chsdk 所以我试了一下(见编辑),但程序仍然像以前一样只删除单个数字。我做错了什么?
  • @Duardo 你可能会使用Integer.parseIn(),看看我的编辑。
  • @chsdk 非常感谢!
  • @Duardo 很高兴它有帮助。
【解决方案2】:

用逗号创建一个分割字符串。将每个元素添加到一组字符串中。现在您有一组唯一的数字。(设置丢弃重复值)

Set<String> unique = new HashSet<String>();
String myString[]=str.split(",");    
for(String t:myString)
unique.add(t)

【讨论】: