2011-12-28 15 views
6

Im cercando di ottenere la prima occorrenza nel mio punto di inizio stringa qualcuno può aiutarmiCome si ottiene la prima occorrenza di un carattere in Substring

string dir = Request.MapPath(Request.ApplicationPath) + "\\App_GlobalResources\\"; 

foreach (var file in Directory.EnumerateFiles(dir, "*.resx")) 
{ 
    ddlResources.Items.Add(new ListItem { Text = file.Substring(firstoccuranceof("."), file.LastIndexOf(".")), Value = file }); 
} 

se faccio file.Substring (file.IndexOf (". "), file.LastIndexOf (". ")) ottengo un errore

+0

Puoi dare un esempio specifico, per una determinata stringa, che cosa vuoi ottenere? Esempio: Se la stringa era '" Hello_world.jpg "' quale dovrebbe essere il risultato? –

+0

Si ha un errore di sintassi, vale a dire l'uso di '{' '}' come in: new ListItem {...}. Inoltre, perché stai assegnando Text = e Value = ... non fanno nulla, e infine probabilmente vorrai ottenere il nome del file senza estensione .resx e lo ottieni usando: file.Substring (0, fileLastIndexOf (".")) –

risposta

10

Per rispondere alla domanda attuale, è possibile utilizzare string.IndexOf per ottenere la prima occorrenza di un carattere. Nota che dovrai sottrarre questo valore dalla tua chiamata LastIndexOf, poiché il secondo parametro di Substring è il numero di caratteri da recuperare, non un indice di inizio e di fine.

Tuttavia ... Invece di analizzare i nomi, è possibile utilizzare semplicemente Path.GetFilenameWithoutExtension per ottenere direttamente il nome file.

+0

potresti mostrare cosa intendi cos lo ho provato in questo modo file.Substring (file.IndexOf ("."), File.LastIndexOf (".")) – ONYX

+0

@KDM Cosa stai cercando di ottenere? Probabilmente hai bisogno di 'file.Substring (file.IndexOf (". "), File.LastIndexOf (". ") - file.IndexOf (". "))' - ma GetFilenameWithoutExtension potrebbe essere migliore qui ... –

+0

+1 per non solo dicendo come "dovrebbe farlo al posto", ma per rispondere alla domanda dato _e also_ che fornisce un metodo alternativo – elmer007

5

prima occorrenza

String.IndexOf('.') 

Ultima occorrenza

String.LastIndexOf('.') 
+0

ho provato file.IndexOf (".") Ma ottengo un errore – ONYX

+0

Che errore? Possiamo sapere di vedere effettivamente cosa fallisce per te? – King

6

Utilizzare i metodi di stringa IndexOf e LastIndexOf per ottenere l'indice della prima e dell'ultima occorrenza della stringa di "ricerca". È possibile utilizzare i metodi System.IO.Path.GetExtension(), System.IO.Path.GetFileNameWithoutExtension() e System.IO.Path.GetDirectoryName() per analizzare il percorso.

Per esempio,

string file = @"c:\csnet\info.sample.txt"; 
Console.WriteLine(System.IO.Path.GetDirectoryName(file));   //c:\csnet 
Console.WriteLine(System.IO.Path.GetFileName(file));    //info.sample.txt 
Console.WriteLine(System.IO.Path.GetFileNameWithoutExtension(file));//info.sample 
Console.WriteLine(System.IO.Path.GetExtension(file));    //.txt 
+1

Credo che questo è ciò di cui ha bisogno, per ottenere il nome del file senza percorso ed estensione. –

+1

Sì. Lo sta facendo da capo. Avrebbe potuto persino usare una divisione e ottenere le stringhe piuttosto che la sottostringa per questo compito. Questa risposta è la migliore per il suo compito – King

0

Credo che nel tuo caso particolare si sta cercando di ottenere non IndexOf ... Invece è necessario utilizzare 0 perché si sta cercando di creare una chiave in base a nome del file, se capire correttamente:

`ddlResources.Items.Add(new ListItem(file.Substring(0, file.LastIndexOf(".")), file));` 

inoltre, è necessario '{}' in là come a new ListItem {...} che è anche andando a causare un errore di sintassi ... in ogni caso date un'occhiata ..

1

file.IndexOf (".")

Avrebbe dovuto ottenere la prima occorrenza di ".". Altrimenti restituirà -1 se non trovato.

0

Poiché la domanda originale è contrassegnata con il tag [regex], fornirò la seguente soluzione, tuttavia la risposta migliore per l'analisi semplice dei percorsi mediante .NET non è l'espressione regolare.

//extracts "filename" from "filename.resx" 
string name = Regex.Match("filename.resx", @"^(.*)\..+?$").Groups[1].Value; 

Utilizzare una risposta che si basa sulla classe Path invece, per semplicità. Altre risposte contengono tali informazioni.

Problemi correlati