2012-10-23 14 views

Antwort

36

Bearbeiten: Go ist weitergezogen. Bitte sehen Sie Keith's answer.

Verwenden Sie path/filepath.Ext, um die Erweiterung zu erhalten. Sie können dann die Länge der Erweiterung verwenden, um den Teilstring abzüglich der Erweiterung abzurufen.

var filename = "hello.blah" 
var extension = filepath.Ext(filename) 
var name = filename[0:len(filename)-len(extension)] 

Alternativ können Sie strings.LastIndex verwenden, um die letzte Periode zu finden (.), Aber dies kann ein wenig zerbrechlich, dass sein wird es Grenzfälle (zB ohne Erweiterung), dass filepath.Ext Griffe, die Sie benötigen für codieren explizit, oder wenn Go auf einem theoretischen O/S ausgeführt werden soll, das einen anderen Erweiterungsbegrenzer als den Punkt verwendet.

+1

Danke, mein Problem lösen jetzt. – Coder

+0

strings.TrimSuffix, darunter, tut das gleiche Array math/Indizes :) – rogerdpack

+2

@rogerdpack, ja Leute sollten Keiths Antwort verwenden. "TrimSuffix" war in Go nicht vorhanden, als ich diese Antwort geschrieben habe (es wurde [in Go 1.1 im Februar 2013 hinzugefügt] (https://code.google.com/p/go/source/diff?spec=svnc7353c98694b135ba941cea93b01e5c0e6a4dd55&old=c0f7c53dcfce43f4921cce7bb2ef7800c752bf4c&r) = c7353c98694b135ba941cea93b01e5c0e6a4dd55 & format = unidiff & pfad =% 2Fsrc% 2Fpkg% 2Fstrings% 2Fstrings.go)). –

0

Auf diese Weise funktioniert auch:

var filename = "hello.blah" 
var extension = filepath.Ext(filename) 
var name = TrimRight(filename, extension) 

aber vielleicht Methode Paul Ruanes ist effizienter?

+3

Ich denke, TrimRight entfernt hier einen "Cutset" (dh einen Zeichensatz) vom Ende, der hier vielleicht nicht das ist, was Sie wollen: http://golang.org/pkg/strings/#TrimRight (siehe auch TrimSuffix) – rogerdpack

108

Versuchen:

basename := "hello.blah" 
name := strings.TrimSuffix(basename, filepath.Ext(basename)) 

TrimSuffix im Grunde erzählt die Hinter Zeichenfolge, die die Erweiterung mit einem Punkt ist abzustreifen.

TrimSuffix Doku here

+0

Erkläre warum das funktioniert. –

+2

Ich mag dieses, scheint besser lesbar als Array-Mathe zu tun – rogerdpack

+1

Beachten Sie, dass 'filepath.Ext (" test.tar.gz ")' zurückgibt '.gz' das kann oder nicht sein, was Sie wollen. –

Verwandte Themen