Domanda

In Java c'è una bella classe chiamata scanner per la lettura di stringhe e flussi di un determinato formato a-strutture di dati come numeri interi, galleggianti, ... C'è un equivalente in Mono? In Net v'è un binario-reader, ma si legge i dati come file binari. Voglio una classe che leggere i dati analizzando da una stringa.

EDIT: la reazione sulle risposte attuali, so che la maggior parte dei tipi di dati hanno un parse-metodo, ma il problema con questi sono, essi non leggere la stringa in modo sequenziale. In Java è sufficiente inizializzare l'oggetto, e attivando i metodi, di leggere in sequenza i tipi di dati.

È stato utile?

Soluzione

Bene, dal momento che si sta leggendo un file in per casi di test, ho intenzione di assumere si conosce l'esatto formato dei dati in arrivo e come ha bisogno di essere analizzato. Guardando classe Parser di Java nella documentazione non farlo sembrare molto complicato o molto di più di una classe di convenienza. Sembra tokenize solo la stringa flusso sugli spazi e fornire funzioni per prendere il token e analizzarlo. E per quanto ne so, Net non ha una classe equivalente. Quindi, se volete uno per il riutilizzo, allora avrete bisogno di scrivere uno voi stessi.

Ma l'algoritmo di base è necessario è quello di leggere il contenuto del file, dividere i gettoni, e analizzare. Se il file è di dimensioni ragionevoli, è possibile utilizzare File.ReadAllLines() che legge il contenuto del file linea per linea in un String[]. Oppure si potrebbe utilizzare una classe StreamReader di leggere le linee uno alla volta utilizzando la sua ReadLine(). Poi una volta che li hai in fila, li si dovrebbe tokenize con String di Split(), e poi analizzare.

Non sapendo esattamente come è necessario utilizzare i valori nel file, un modello molto semplice potrebbe essere:

// Read in the whole file
String[] strLines = File.ReadAllLines(strFilePath);

// Loop through each of the lines to process their contents
foreach (String strLine in strLines) {
    // Tokenize on the spaces
    String[] strTokens = strLine.Split(' ');

    // Parse the values
    int iIntValue = Int.Parse(strTokens[0]);
    double dDoubleValue = Double.Parse(strTokens[1]);

    // Do something with the values
}

Creare la propria classe Parser permetterebbe di mantenere i gettoni statali e Advance Auto come li si usa. Se seguire questa strada, il StreamReader può essere l'opzione migliore.

Altri suggerimenti

La maggior parte dei tipi di dati di base avrà un .Parse e .TryParse() metodi che lo farà per voi.

Ad esempio il Int32.TryParse metodo.

In NET, molti del tipo hanno .Parse() statico e metodi .TryParse() che accetta un parametro stringa.

Si potrebbe fare qualcosa di simile:

Stream s = new Stream();
// Wire up the stream.

StreamReader reader = new StreamReader(s);
String value = reader.ReadToEnd();

int valueAsInt = Int32.TryParse(value);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top