Welche Methoden gibt es, um Strings in Java zu analysieren? [geschlossen]

  • Zum Analysieren von Player-Befehlen habe ich meistens das split Methode, um einen String nach Trennzeichen zu teilen und dann den Rest anhand einer Reihe von if s oder switch es. Welche unterschiedlichen Möglichkeiten gibt es, Strings in Java zu analysieren?

    13 May 2014
    4 revs, 3 users 80%alumb
14 answers
  • Ich mag reguläre Ausdrücke wirklich. Solange die Befehlszeichenfolgen relativ einfach sind, können Sie einige reguläre Ausdrücke schreiben, für die ein manuelles Parsen von einigen Codeseiten erforderlich ist = "http://www.regular-expressions.info" rel = "noreferrer"> http://www.regular-expressions.info für ein gutes Intro von Regexen sowie spezielle Beispiele für Java

    03 April 2012
    Code Lღvernoircc
  • Ich gehe davon aus, dass Sie versuchen, die Befehlsschnittstelle so verzeihend wie möglich zu machen. Wenn dies der Fall ist, schlage ich vor, dass Sie einen ähnlichen Algorithmus verwenden:

    1. Lesen Sie den String
      • Trennen Sie die Zeichenfolge in Token.
      • Verwenden Sie ein Wörterbuch, um Synonyme in ein allgemeines Formular zu konvertieren.
      • Konvertieren Sie beispielsweise "hit", "punch" , "schlagen" und "treten" alle, um zu "treffen"
      • Führen Sie Aktionen auf einer ungeordneten, inklusiven Basis durch
      • Ungeordnete - "Schlag den Affen ins Gesicht" ist dasselbe wie "das Gesicht im Affenschlag"
      • Inklusive - Wenn der Befehl "Schlag" sein soll der Affe im Gesicht "und sie liefern" Punch Monkey ", sollten Sie prüfen, wie viele Befehle dies entspricht. Wenn nur ein Befehl vorhanden ist, führen Sie diese Aktion aus. Es kann sogar eine gute Idee sein, Befehlsprioritäten zu haben, und selbst wenn es sogar Übereinstimmungen gibt, wird die oberste Aktion ausgeführt.
    06 August 2008
    andrewrk
  • Manuelles Parsing macht viel Spaß ... am Anfang :)

    Wenn Befehle nicht sehr komplex sind, können Sie sie auf dieselbe Weise behandeln wie diejenigen, die in Befehlszeileninterpreten verwendet werden. Es gibt eine Liste von Bibliotheken, die Sie verwenden können: http://java-source.net/open -source / Befehlszeile . Ich denke, Sie können mit Apache Commons CLI oder args4j (verwendet Anmerkungen). Sie sind gut dokumentiert und sehr einfach in der Anwendung. Sie verarbeiten das Parsing automatisch und das einzige, was Sie tun müssen, ist das Lesen bestimmter Felder in einem Objekt.

    Wenn Sie komplexere Befehle haben, wäre das Erstellen einer formalen Grammatik vielleicht eine bessere Idee. Es gibt eine sehr gute Bibliothek mit grafischem Editor, Debugger und Interpreter für Grammatiken. Es heißt ANTLR (und der Herausgeber ANTLRWorks ) und es ist kostenlos :) Es gibt auch einige Beispiele für Grammatiken und Lernprogramme.

    06 May 2012
    Matt Ball
  • Ich würde Java-Migrationen von Zork und lehnen Sie sich zu einem einfachen Prozessor für natürliche Sprache (entweder durch Tokenisierung oder Regex), wie folgt (über diesen Link):

     public static boolean simpleNLP (String inputline, String keywords []) 
     {
     int i; 
     int maxToken = keywords.length; 
     int an, from; 
     if (inputline.length () = inputline .length ()) false zurückgeben; // auf leere und leere Zeilen prüfen <;> while (bis & gt; = 0) 
     {
     bis = inputline.indexOf ('', from); 
     if (bis & gt; 0) {< lexed.addElement (inputline.substring (von, bis)); 
     from = bis; 
     while (inputline.charAt (from) == '' 
     & amp; from = keywords.length ) {status = true; break;} 
    } 
    } 
     Rückkehrstatus; 
    } 
     

    ...

    Alles, was einem Programmierer einen Grund gibt, Zork noch einmal anzuschauen, ist in meinem Buch gut, achten Sie einfach auf Grues.

    ...

    06 August 2008
    Justin Standard
  • Sun selbst empfiehlt, sich vom StringTokenizer fernzuhalten und stattdessen die Methode String.split zu verwenden.

    Sie möchten sich auch die Pattern-Klasse ansehen.

    06 August 2008
    bpapa
  • Erneute Abstimmung für ANTLR / ANTLRWorks. Wenn Sie zwei Versionen der Datei erstellen, eine mit dem Java-Code zum Ausführen der Befehle und eine ohne (nur mit der Grammatik), haben Sie eine ausführbare Spezifikation der Sprache, die sich hervorragend zum Testen eignet, ein Segen für die Dokumentation und eine große Zeitersparnis, wenn Sie sich jemals für eine Portierung entscheiden.

    31 August 2008
    John with waffle
  • Wenn Sie Befehlszeilen analysieren möchten, würde ich vorschlagen, Commons Cli .

    Die CLI-Bibliothek von Apache Commons bietet eine API für die Verarbeitung von Befehlszeilenschnittstellen.

    31 August 2008
    SaMTom
  • Testen Sie JavaCC einen Parser-Generator für Java.

    Es verfügt über eine Vielzahl von Funktionen zur Interpretation von Sprachen und wird von Eclipse gut unterstützt.

    21 January 2015
    MagnilexTomasz Nurkiewicz
  • @CodingTheWheel Hier wird Ihr Code ein wenig aufgeräumt und durch Eclipse ( ctrl + shift + f ) und der eingefügte eingefügt zurück hier:)

    Einschließlich der vier Leerzeichen vor jeder Zeile.

     public static boolean simpleNLP(String inputline, String keywords[]) {
        if (inputline.length() < 1)
            return false;
    
        List<String> lexed = new ArrayList<String>(); 
        for (String ele : inputline.split(" ")) {
            lexed.add(ele);
        }
    
    
        boolean status = false;
        to = 0;
        for (i = 0; i < lexed.size(); i++) {
            String s = (String) lexed.get(i);
            if (s.equalsIgnoreCase(keywords[to])) {
                to++;
                if (to >= keywords.length) {
                    status = true;
                    break;
                }
            }
        }
        return status;
    }
     
    21 August 2015
    Valery Viktorovskypraveena_kd
  • JCommander scheint ziemlich gut zu sein, obwohl ich es noch nicht getestet habe.

    20 August 2010
    Pierre Gardin