Mittwoch, April 8, 2020

token-parsing in java

Ich habe eine Datei erstellt mit printStream-Objekt, wie unten gezeigt.

PrintStream outPutOffice = new PrintStream(
   new BufferedOutputStream(new FileOutputStream(inDir+"/Office.txt")));
outPutOffice.print(fValue + (findx < agtOffColCount ? "|" : ""));   

Nun habe ich es zu Lesen, Inhalte zu trennen und die Token mit „|“ als ich geschrieben habe, token mit „|“ getrennt. Ich habe den code schreiben, wie unten gezeigt, es wird gelesen, Linie korrekt, aber nicht getrennt-token mit “ | “ – Zeichen.

BufferedReader inPutAgent = new BufferedReader(
   new InputStreamReader(new FileInputStream(inDir+"/Office.txt")));

String column=inPutAgent.readLine();
String []columnDetail = column.split("|");

columndetail array enthält die einzelnen Zeichen in jeder index-vielmehr will ich einzelne token, die in jeder index.

Was ist das problem?

InformationsquelleAutor lakhaman | 2009-10-27

3 Kommentare

  1. 6

    den split Methode arbeitet mit regulären Ausdrücken und da das pipe-symbol (|) hat eine Besondere Bedeutung und ist reserviert, die Sie brauchen, um es zu entkommen, wie diese:

    split("\\|");

    Sollten Sie Lesen über regex hier oder hier

    • so kann Sie |(pipe-symbol) mein problem lösen wird?
    • Ich denke also, probieren Sie es aus
  2. 4

    Sollten Sie schauen in die StringTokenizer, es ist ein sehr nützliches Werkzeug für diese Art von Arbeit.

    Beispiel

     StringTokenizer st = new StringTokenizer("this is a test");
     while (st.hasMoreTokens()) {
         System.out.println(st.nextToken());
     }

    Diese wird putput

     this
     is
     a
     test

    Verwenden Sie die Zweite Konstruktor StringTokenizer um die Trennzeichen:

    StringTokenizer(String str, String delim)

    Können Sie auch ein Scanner als einer der Kommentatoren sagte, dies könnte ähnlich Aussehen, wie diese

    Beispiel

     String input = "1 fish 2 fish red fish blue fish";
    
     Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
    
     System.out.println(s.nextInt());
     System.out.println(s.nextInt());
     System.out.println(s.next());
     System.out.println(s.next());
    
     s.close(); 

    Die Ausgabe wäre

     1
     2
     red
     blue 

    Bedeutung, dass es geschnitten wird, das Wort „Fisch“ und geben Sie den rest, mit „Fisch“ als Trennzeichen.

    Beispiele aus der Java-API

    • StringTokenizer(String str, String,“|“), wird die tokenisierung der Strings mit | als Trennzeichen.
    • Überprüfen Sie heraus den Scanner, es ist viel besser dann den StringTokenizer java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html
    • Sie beide arbeiten sehr gut und ich würde vorschlagen, jeder von Ihnen über .split() !
    • Ekberg: ich denke, split ist in Ordnung, und wir sollten zeigen @lakhaman was ist falsch mit seinen code, nicht nur um ihn zu arbeiten…
    • Vom 1.6 Dokumentation StringTokenizer … „StringTokenizer ist ein Vermächtnis Klasse, beibehalten aus Gründen der Kompatibilität obwohl seine Verwendung wird abgeraten, in die der neue code. Es wird empfohlen, dass alle, die diese Funktionalität verwenden Sie die split-Methode der String oder java.util.regex-Paket statt.“ … split oder regex sind wirklich die bevorzugte Methode der tokenisierung.
    • Split funktioniert gut, aber StringTokenizer arbeitet besser für die Mehrheit der tokenisierung hab ich zu tun hatte. Keine Ahnung, warum Sie würde abraten es zu verwenden, aber dann wieder, es ist nicht das erste mal, ich habe Ihre „Entmutigung“ und deprecations fraglich zu sein (am besten).
    • Büther, ja wir sollten ihm eine Lösung für das problem und ihm beibringen, wie es zu tun korrekt. Die möglicherweise nicht der gleiche wie zeigen ihm, was falsch war mit Seinem code. Sie schon die regex-Lösung, es wäre überflüssig für mich zu sagen, dass aswell. Ich möchte dazu beitragen mit einer alternativen Lösung, die in meinem opnion macht den code besser lesbar und einfacher, mit zu arbeiten.
    • Eigentlich wollte ich das nicht wissen. Aber in früheren Java-Versionen war es besser, verwenden Sie den tokenizer. afaik.

  3. 2

    Dem argument split ist eine regex. Das sollten Sie tun:

    String []columnDetail = column.split("\\|");

    oder:

    String []columnDetail = column.split("[|]");

Kostenlose Online-Tests