WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   StringTokenizer in java (http://www.wcm.at/forum/showthread.php?t=61051)

it00x30 27.06.2002 10:07

StringTokenizer in java
 
hi fachmänner und fachfrauen,

hab ein kleines problem:
ich lese ein ganzes file ein, dessen einträge ich nacher in objekte "umwandeln" muss. dazu lese ich zuerst das ganze file in einen string, und dann sollte ich die einzelnen teile mittels stringtokenizer trennen um den konstruktor aufrufen zu können.

es hat sich zufällig ergeben, dass im eingelesenen string nach jedem eintrag ein "null" steht, der mir bekannte stringtokenizer aber nur einzelne zeichen als trennung zulässt. wie bekomme ich ihn dazu mir das ganze wort "null" als token-grenze zu definieren und nicht jedes n, u oder l

thanks for your help, tobi

ps: falls es jemanden interessiert - es soll ein Verwaltungstool für BibTex-Datenbanken werden

Gonte 27.06.2002 12:23

mit StringTokenizer können nur einzelne zeichen als delimiter verwendet werden.

ich würde das ganze mit einem StreamTokenizer lösen.

it00x30 27.06.2002 17:32

hab mir gerade die doku zu streamtokenizer angesehen, dabei stellt sich für mich die frage, wie ich dem meine delimiter angebe - vielleicht bin ich blind aber ich find weder einen konstruktor, der das kann, noch eine funktion

Gonte 28.06.2002 10:25

jo, sorry. ich hab das zuerst falsch verstanden (lesen ist eines, verstehen etwas anderes ;) )

wenn ich das problem jetzt richtig aufgefasst habe, ist mir keine klasse bekannt, die das leistet. allerdings ist so eine klasse ja recht schnell entworfen. z.b.

Code:

public class StringDelimiterTokenizer implements Enumeration
{
        private String delimiter;
        private String str;
        private int currentPosition;
        private int maxPosition;
       
        public StringDelimiterTokenizer(String string, String delimiter)       
        {
                this.str=string;
                this.delimiter=delimiter;
                this.currentPosition=0;
                this.maxPosition=string.length();
        }
       
        public boolean hasMoreTokens()
        {
                return (currentPosition==maxPosition ? false : true);
        }
       
        public boolean hasMoreElements()
        {
                return hasMoreTokens();
        }
       
        public String nextToken()
        {
                int pos;
               
                if((pos=str.indexOf(delimiter, currentPosition))==-1)
                {
                        int temp=currentPosition;
                        currentPosition=maxPosition;
                        return str.substring(temp).trim();
                }
                else
                {
                        String sub=str.substring(currentPosition, str.indexOf(delimiter, currentPosition));
                        currentPosition=pos+delimiter.length();
                        if(currentPosition>=maxPosition)
                                currentPosition=maxPosition;
                        return sub.trim();
                }
        }
       
        public Object nextElement()
        {
                return nextToken();
    }       
}

das lässt sich sicher leistungsmässig noch tunen. is nur ein spontaner vorschlag. vielleicht kannst ja was damit anfangen.

Gonte 28.06.2002 11:33

kleiner nachtrag, womits einfacher geht, wenn du jdk 1.4 hast:

http://www.galileocomputing.de/openb...va-04.htm#t317

it00x30 28.06.2002 13:12

danke für den code - hab mir schon gedacht, dass ich da selber was schreiben muss - schauma mal, wie ich die klasse übernehmen kann (bzw. ob sie funktioniert ;-) )

Gonte 28.06.2002 13:24

funktionieren soll es auch noch?? was für ansprüche :D

it00x30 29.06.2002 15:34

waren eh nicht zu hoch gesteckt, funktionerte auf anhieb ...

du kommst wohl ein wenig von der c-seite, deinem stil nach zu schliessen.

ich wollte fragen, ob ich die klasse als open-source betrachten kann - nicht dass mein kleines projekt ein welterfolg wird und die softwareindustrie grundlegend verändert und ich mich dann mit copyright-klagen herumärgern muss ;-)

Gonte 29.06.2002 23:52

mit c hab ich nix (mehr) am hut. gott sei dank gibts ja java! :D

mit dem code kannst machen was willst ... am besten verbessern. ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag