(.+?) in contains benutzen? Alle (.+?) in einem String kriegen?

HilfeBeiJava

Grünschnabel
Hi!

Ich arbeite derzeitig an einem winzigem Programm, und habe eine kleine GUI geschrieben. Nun soll für jeden String der reingeschrieben wird, eine Methode aufgerufen werden.

Also, so:
In meiner GUI steht ein Text, zum beispiel

Code:
Hallo, wie
geht es 
dir
Wenn jetzt etwas dazu geschrieben wird, soll so etwas passieren:

Code:
public void write(String text){
//kriege alle <format=(.+?)>(.+?)</format> aus dem string
//Kriege start,ende und so weiter vom string
//Schreibe den String
//Rufe Methode eines DefaultStyledDocuments auf, um die string zu formatieren - Hier ist dann ein problem, ich will mit einer methode aus dem string welcher nach <format= steht ein format kriegen, und den string der zwischen den tags steht formatieren.
Habe schon ewig viel versucht, kriege es aber nicht hin.. Hat wer ne Idee?

LG
 

youza

Erfahrenes Mitglied
Servus ich würde dir da einen KeyListener empfehlen hab dir hier ein Beispiel geschrieben da kannst du dich dran orientieren:
Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class testKey extends JFrame implements KeyListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int line_count;
	private JTextArea jtf = new JTextArea();

	public static void main(String []args){
		new testKey();
	}
	public testKey(){
		line_count = 0;
		jtf = new JTextArea();
		jtf.addKeyListener(this);
		jtf.setSize(200,200);
		this.add(jtf);		
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(220,220);
		this.setVisible(true);
		
		
	}
	@Override
	public void keyPressed(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
		if(arg0.getKeyCode()==10)
		{
			String temp;
			temp = jtf.getText().split("\n")[line_count];
			line_count++;
			doSomething(temp);
		}
	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub

	}
	private void doSomething(String input){
		
		System.out.println(input);
	}

}

Grüße
Youza

Zu dem zweiten fällt mir nix blöderes ein als:
Java:
private void doSomething(String input){
		String test = "<format=(.+?)>(.+?)</format>";
		String format = test.substring(test.indexOf("<format="), test.indexOf(">"));
		format = format.replace("<format=", "");
		String zuformatieren = test.substring(test.indexOf("<format="+format+">"), test.indexOf("</format>"));
		zuformatieren = zuformatieren.replace("<format="+format+">", "").replace("</format>", "");
		System.out.println(format);
		System.out.println(zuformatieren);
	}
 

HilfeBeiJava

Grünschnabel
Vielen Dank für die schnell Antwort!

Nunja, in die TextArea kann (soll) man nicht schreiben können, daher habe ich eine Methode dafür gemacht - Schreiben selbst ist kein Problem, aber eben das parsen dieser Tags :(
Ich hab dem JtextPane ein Document welches DefaultStyledDocument extendet gegeben, und dadurch kann ich Text-Abschnitte färben, "kursieven", und so weiter - Und genau so soll es geparst werden. Also zB so:

Der String Hallo <format=1>du</format>!

Jetzt soll eine Methode erkennen was 1 ist, in diesem Fall zum Beispiel kursiv - Was ja auch einfach ist - Und dann im Text das "du" kursiv anzeigen lassen :(
 

youza

Erfahrenes Mitglied
Die zweite Antwort hat dir da nicht geholfen ist nicht perfekt aber zumindest ein ansatz

Ich stell mir des Ganze ungefähr so vor:
Java:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;



public class XmlParser {

	/**
	 * @param args
	 * 
	 */
	public static void main(String[] args){
		String gelesen;
		// TODO Auto-generated method stub
		// Streamkette zum Lesen des Dateiinhalts
		BufferedReader in;
		try {
			in = new BufferedReader(new InputStreamReader(
					new FileInputStream("format.xml")));
		
			// Lesen und Ausgeben
			while ((gelesen = in.readLine()) != null) {
				if(gelesen.trim().startsWith("<format="))
					parse(gelesen);
					
			}
			// Obersten Stream schliessen
			in.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private static void parse(String input){
        String format = input.substring(input.indexOf("<format="), input.indexOf(">"));
        format = format.replace("<format=", "");
        String zuformatieren = input.substring(input.indexOf("<format="+format+">"), input.indexOf("</format>"));
        zuformatieren = zuformatieren.replace("<format="+format+">", "").replace("</format>", "");
        System.out.println(format);
        System.out.println(zuformatieren);
		
	}

}

zugehörige xml-file:
Code:
<xml>
<formats>
	<format=2>peter</format>
	<format=1>hans</format>
</formats>
</xml>
 
Zuletzt bearbeitet:

Neue Beiträge