2009-07-06 6 views
8

Quale sarebbe il modo migliore e più idiomatico per spezzare una stringa in due al posto dell'ultimo punto? Separando sostanzialmente l'estensione dal resto di un percorso in un percorso file o URL. Finora quello che sto facendo è Split (".") E poi String.Join (".") Di tutto tranne l'ultima parte. Sembra usare un bazooka per uccidere le mosche.Il modo migliore per spezzare una stringa sull'ultimo punto su C#

risposta

22

Se si desidera prestazioni, qualcosa di simile a:

string s = "a.b.c.d"; 
    int i = s.LastIndexOf('.'); 
    string lhs = i < 0 ? s : s.Substring(0,i), 
     rhs = i < 0 ? "" : s.Substring(i+1); 
5

Si potrebbe utilizzare Path.GetFilenameWithoutExtension()

o se questo non funziona per voi:

int idx = filename.LastIndexOf('.'); 

if (idx >= 0) 
    filename = filename.Substring(0,idx); 
+0

Funzionerà su pezzi di URL (utilizzando/invece di \\)? E restituirà anche le "cartelle"? Path.GetFilename() restituisce solo il nome del file, senza directory, AFAIK. – Pablo

+0

Se l'OP avesse chiesto solo i percorsi dei file, questo sarebbe un +1. Ma i documenti System.IO.Path non menzionano il supporto per gli URL. – OregonGhost

+0

Corretto, ma potrebbe aver funzionato per te se il nome file non includeva un percorso. –

1

metodo La stringa LastIndexOf forse di qualche utilità per voi qui.

Ma gli operatori Path o FileInfo saranno più adatti per operazioni basate su nome file.

0

Penso che quello che stai veramente cercando è Path.GetFileNameWithoutExtension Method (System.IO) ma solo per il gusto di farlo:

string input = "foo.bar.foobar"; 
int lastDotPosition = input.LastIndexOf('.'); 

if (lastDotPosition == -1) 
{ 
    Console.WriteLine("No dot found"); 
} 
else if (lastDotPosition == input.Length - 1) 
{ 
    Console.WriteLine("Last dot found at the very end"); 

} 
else 
{ 
    string firstPart = input.Substring(0, lastDotPosition); 
    string lastPart = input.Substring(lastDotPosition + 1); 

    Console.WriteLine(firstPart); 
    Console.WriteLine(lastPart); 
} 
2

per ottenere il percorso senza l'estensione, utilizzare

System.IO.Path.GetFileNameWithoutExtension(fileName) 

e per ottenere il extenstion (compreso il punto), utilizzare

Path.GetExtension(fileName) 

EDIT:

0.123.

Purtroppo GetFileNameWithoutExtension strisce fuori dal percorso che porta, così invece si può usare:

if (path == null) 
{ 
    return null; 
} 
int length = path.LastIndexOf('.'); 
if (length == -1) 
{ 
    return path; 
} 
return path.Substring(0, length); 
+0

Funziona anche con gli URL – jmservera

1

Cosa succede ad usare il metodo LastIndexOf che restituisce l'ultima trovata posizione di un carattere. Quindi puoi utilizzare la sottostringa per estrarre ciò che desideri.

1

String.LastIndexOf restituisce la posizione del punto se mai esiste nella stringa. È quindi possibile utilizzare String.Substring per dividere la stringa.

1

È possibile utilizzare il metodo di stringa

LastIndexOf e sottostringa per compire il compito.

Problemi correlati