Strings vergleichen; Komma ignorieren

denis7788

Bekanntes Mitglied
Hallo!

Ich habe folgendes Problem:
Ich habe ein Chat Programm bestehend aus zwei Fenstern, die neben den Chat-üblichen Elementen (Chatverlauf, Eingabe, Senden-Button) ein Label beinhalten, das die Anzahl gleicher Tags zählen soll.
Ich habe es bisher so gelöst, dass ich die Komplette Eingabe als String mit dem chatverlauf des Chatpartners verglichen habe, bzw. geprüft, ob dieser enthalten ist (mit lastIndexOf() ).

Nun möchte ich aber, das auch einzelne Worte aus einer Eingabe erkannt werden, die durch Kommas separiert sind. Zum Beispiel:
Chatpartner#1: Haus,Baum,Esel
Chatpartner#2: Esel,Auto,Haus

Hier soll dann als Anzahl gleicher Tags 2 heraus kommen.

Hat jemand eine Idee, wie ich das lösen könnte?
Hier der Code (Die angesprochene codestelle befindet sich in den letzten beiden Klassen)

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Chat_Fenster extends JFrame {
	
	JTextArea chat1;
	JTextField input1;
	JButton send1;
	JLabel info1;
	JTextArea chat2;
	JTextField input2;
	JButton send2;
	JLabel info2;
	int indexOfTxt;
	int numberCommonTags;
	String chat_1_txt="";
	String chat_2_txt="";
	
	public static void main(String[]args) {
		
		Chat_Fenster f = new Chat_Fenster();
		f.Chat();
		
		
	}
	
	public void Chat() {
		
		JFrame chat_window1 = new JFrame("Chat#1");
		
		JPanel panel1 = new JPanel();
		JPanel panel11 = new JPanel();
		panel11.setLayout(new BorderLayout());
		
		this.chat1 = new JTextArea(15,20);
		chat1.setLineWrap(true);
		chat1.setEditable(false);
		this.input1 = new JTextField(25);
		this.send1 = new JButton("senden");
		send1.addActionListener(new SendButton1Listener() );
		this.info1 = new JLabel (numberCommonTags+" gemeinsame Tags!"); 
		
		panel11.add(chat1, BorderLayout.CENTER);
		panel11.add(info1, BorderLayout.SOUTH);
		panel1.add(input1);
		panel1.add(send1);
		
		chat_window1.getContentPane().add(BorderLayout.CENTER, panel11);
		chat_window1.getContentPane().add(BorderLayout.SOUTH, panel1);
		chat_window1.setSize(400,400);
		chat_window1.setVisible(true);
		
		
JFrame chat_window2 = new JFrame("Chat#2");
		
		JPanel panel2 = new JPanel();
		JPanel panel22 = new JPanel();
		panel22.setLayout(new BorderLayout());
		
		this.chat2 = new JTextArea(15,20);
		chat2.setLineWrap(true);
		chat2.setEditable(false);
		this.input2 = new JTextField(25);
		this.send2 = new JButton("senden");
		send2.addActionListener(new SendButton2Listener() );
		this.info2 = new JLabel(numberCommonTags+" gemeinsame Tags!");
		
		panel22.add(chat2, BorderLayout.CENTER);
		panel22.add(info2, BorderLayout.SOUTH);
		panel2.add(input2);
		panel2.add(send2);
		
		chat_window2.getContentPane().add(BorderLayout.CENTER, panel22);
		chat_window2.getContentPane().add(BorderLayout.SOUTH, panel2);
		chat_window2.setSize(400,400);
		chat_window2.setVisible(true);
		    
	}
	
	public class SendButton1Listener implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			
			String tag = input1.getText();
			indexOfTxt = chat_2_txt.lastIndexOf(tag);
			if(indexOfTxt!=-1) {
				numberCommonTags++;
			} 
			info1.setText(numberCommonTags+" gemeinsame Tags!"+chat_1_txt);
			info2.setText(numberCommonTags+" gemeinsame Tags!"+chat_2_txt);

			
			chat1.setText(chat1.getText()+"#1 "+input1.getText());
			chat2.setText(chat2.getText()+"#1 "+input1.getText());
			chat_1_txt = chat_1_txt + input1.getText();
			input1.setText("");
			
			
			
			
		}
	}
		
		
		public class SendButton2Listener implements ActionListener {
			public void actionPerformed(ActionEvent arg0) {
				
				String tag = input2.getText();
				indexOfTxt = chat_1_txt.lastIndexOf(tag);
				if(indexOfTxt!=-1) {
					numberCommonTags++;
				}
				info1.setText(numberCommonTags+" gemeinsame Tags!");
				info2.setText(numberCommonTags+" gemeinsame Tags!");
				
				chat2.setText(chat2.getText()+"#2 "+input2.getText()+"\n");
				chat1.setText(chat1.getText()+"#2 "+input2.getText()+"\n");
				chat_2_txt = chat_2_txt + input2.getText();
				input2.setText("");
				
				
			}

	}
}
 
das lässt sich doch einfach mit einem StringTokenizer oder Scanner lösen. dann kannst du doch tokens vergleichen.
 
Ich habe ja nicht immer diese Separierung durch Kommata. Was ist, wenn ich z.B. folgenden Chatverlauf habe:

#1:Hallo!
#2:Hallo!
#1:Haus,Pferd,Auto
#2:Auto,Huhn,Pferd
#1:gestohlen
#2:wer hat das auto gestohlen

soll hier ergeben: 4 gemeinsame tags...
Wenn ich mit Tokenizer arbeite, dann kann ich doch nur entweder durch Komma separieren, oder durch Leerzeichen. so habe ich es zumindest verstanden...

Ansonsten (ist der Ansatz so richtig?):
Ich zerlege meine Eingabe in Tokens. Diese speichere ich dann in String variablen und vergleiche, ob diese schonmal im verlauf vorkamen.
 
Du könntest die Token in Sets speichern und dann die Schnittmenge bilden, um die gemeinsamen Wörter zu erhalten. Das wäre am einfachsten.
(Im StringTokenizer kannst du auch mehrere Delimiter angeben)
 

Zurück
Oben