2015-05-22 52 views
1

我做了一個程序,當按下按鈕時刪除字符串中的字符重複。例如,如果字符串是「23332」,則輸出是「23」。現在我的問題是,這真的不適用於10以上的數字。如果字符串是「10」,該程序將其視爲1和0,而不是10。是否有可能以某種方式標記該數字,以便程序知道它是10而不是1和0 ?.提前致謝。這是我的代碼:刪除字符串中的重複數字10以上

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); 
+0

將逗號分隔字符串(http://stackoverflow.com/questions/3481828/how在java中分割一個字符串),修剪每個塊,並將它們解析爲Int(Integer.parseInt),並保持一個整數集來記住你看過的那一個。 –

+0

不,如果你的意思是「45」或「4」和「5」,程序怎麼可能知道?解決這個問題的唯一方法是添加一個分隔字符(就像你在字符串「10,11,12,13,10」中所做的那樣),然後將每個數字存儲在一個「int」數組中,而不是「char」陣列。 – moffeltje

+0

你有上限嗎? –

回答

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()解析字符串值,並從HashMap<Integer,Character>改變你的地圖HashMap<Integer,String>,下面的代碼:

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

很好..!我會在第一行添加這個str = str.replaceAll(「\\ s」,「」); –

+0

@chsdk所以我嘗試了它(請參閱編輯),但程序仍然只刪除像以前一樣的單個數字。我做錯了什麼? – Duardo

+1

@Duardo你可能會使用'Integer.parseIn()',看看我的編輯。 –

0

創建用逗號分割字符串。 (設置丟棄重複值)

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