Regexp

Status
Nicht offen für weitere Antworten.

Shai

Aktives Mitglied
hi

ich muss aus einer tokenliste diejenigen entfernen die vor einem semikolon stehen;
der Vektor sieht zb folgendermaßen aus:

[GEN001,026;, WAYYO)MER, )LOHIYM, NA(&EH, )FDFM]

Wie kann ich nun elemente aus diesem Vektor (egal an welcher Position sie stehen) rausnehmen, die die Form meines ersten eintrags haben? also dass sie direkt vor einem semikolon stehen.
hier soll zb der komplette eintrag "GEN001,026;2" aus der liste rausgenommen werden.

ich hab mal geschaut und regexp macht man bei java wohl mit pattern und matcher oder so, aber ich raff nicht so ganz wie ich das anwenden kann. ausserdem kenne ich mich mit regexp so gar nicht aus.

kann mir jemand sagen wie das aussehen muss?

Code:
for(int i = 0; i<tokenVector.size();++i)
    //if(tokenVector.get[i] match) 
          //deleteeintrag

wäre sehr dankbar wenn mir jemand den code mal eintragen könnte.
danke im voraus shai
 
Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        String st = "[GEN001,026;, WAYYO)MER, )LOHIYM,;, NA(&EH, )FDFM]";
        Pattern p = Pattern.compile("[\\S&&[^\\[;]]+;");
        Matcher m = p.matcher(st);
        StringBuffer buffer = new StringBuffer();
        while (m.find())
        {
            System.out.println("f: "+m.group());
            m.appendReplacement(buffer, "");
        }
        m.appendTail(buffer);
        System.out.println(buffer.toString());
    }
}
 
Wie wäre es damit:
[HIGHLIGHT="Java"]
public static void main(String[] args) {
String s = "[GEN001,026;, WAYYO)MER, )LOHIYM,;, NA(&EH, )FDFM]";
Pattern pattern = Pattern.compile("[\\S&&[^\\[;]]+;");
Vector<String> tokens= new Vector<String>();
tokens.add(s);
StringBuffer buffer = new StringBuffer();
for (String token : tokens) {
buffer.append(pattern.matcher(token).replaceAll(""));
}
System.out.println(buffer.toString());
}
[/HIGHLIGHT]
Also ich möchte gerne auf das replaceAll hinaus. Ist das nicht augenscheinlich effizienter, als wenn der Matcher per Hand veranlasst wird das "gleiche" zu tun?
Aus aktuellem Anlass würde mich das interessieren, ob das eine oder andere Vorteile hat bzw. ob es einfach auf das gleiche hinaus läuft.
 
replaceAll vergesse ich meist, wobei ich mein Konstrukt auch höchstens in Beispielen verwende 😉 :

wäre dann gekürzt:

Code:
public class Test
{
 
    public static void main(String[] args)
        throws Exception
    {
        String st = "[GEN001,026;, WAYYO)MER, )LOHIYM,;, NA(&EH, )FDFM]";
        Pattern p = Pattern.compile("[\\S&&[^\\[;]]+;");
        Matcher m = p.matcher(st);
        String st2 = m.replaceAll("");
        System.out.println(st2);
    }
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben