Domanda

Questa deve essere una classica domanda .NET per chiunque stia migrando da Java.

.NET non sembra avere un equivalente diretto a java.io.StreamTokenizer, tuttavia JLCA fornisce una SupportClass che tenta di implementarlo. Credo che JLCA fornisca anche una Tokenizer SupportClass che prende una stringa come sorgente, da cui ho pensato che uno StreamTokenizer sarebbe derivato, ma non lo è.

Qual è il modo preferito per mettere in token sia uno stream che una stringa? o ce n'è uno? In che modo i flussi vengono tokenizzati in .Net? Mi piacerebbe avere la flessibilità che offre java.io.StreamTokenizer. Qualche pensiero?

È stato utile?

Soluzione

Non c'è nulla in .NET completamente equivalente a StreamTokenizer. Per casi semplici, puoi usare String.Split (), ma per l'analisi dei token più avanzata, probabilmente finirai per usare System.Text.RegularExpressions.Regex .

Altri suggerimenti

Usa System.String.Split se devi dividere una stringa in base a una raccolta di caratteri specifici.

Usa System.Text.RegularExpressions.RegEx.Split per dividere in base sui modelli corrispondenti.

C'è un tokenizer nella libreria Nextem - puoi vedere un esempio qui: http://trac.assembla.com/nextem/browser/trunk/Examples/Parsing.n

È implementato come una macro Nemerle, ma puoi scriverlo e usarlo facilmente da C #

Non credo, per una semplice tokenizzazione dare un'occhiata a System.String.Split ().

La tokenizzazione più complessa può essere ottenuta da System.Text.RegularExpressions.Regex.

Abbiamo avuto lo stesso problema nel trovare un equivalente StreamTokenizer durante il porting di tuProlog da Java a C #. Abbiamo finito per scrivere ciò che per quanto ne so è una conversione diretta di StreamTokenizer che accetta un TextReader come "stream". a scopo di input. Troverai il codice nel download per tuProlog.NET 2.1 (licenza LGPL), quindi sentiti libero per riutilizzarlo e adattarlo alle tue esigenze.

Per tokenizzare una stringa, usa string.Split (...) .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top