Örneğin, "sample.zip" ifadesinden oluşan bir dizim var. ".zip" uzantısını dizeleri paketi veya başka bir nesneyi kullanarak nasıl kaldırabilirim?Dizginin son eki mi yoksa uzantı mı?
cevap
Düzenleme: Go taşındı. Lütfen Keith's answer'a bakın.
Uzantıyı almak için path/filepath.Ext kullanın. Daha sonra, uzantıyı ekleyerek alt dizeyi almak için uzantının uzunluğunu kullanabilirsiniz.
var filename = "hello.blah"
var extension = filepath.Ext(filename)
var name = filename[0:len(filename)-len(extension)]
Alternatif (.) Son dönem bulmak için strings.LastIndex kullanabilirsiniz ama kenar vakalar filepath.Ext
için kod gerekebileceğini işleme (örneğin hiçbir uzantı) olacak bu biraz daha kırılgan olduğunu olabilir Açıkça, ya da Go dönem dışında bir uzatma sınırlayıcı kullanan teorik bir O/S üzerinde çalıştırılacaktı.
var filename = "hello.blah"
var extension = filepath.Ext(filename)
var name = TrimRight(filename, extension)
ama belki Paul Ruane yöntemi daha etkilidir:
Bu yol çok çalışıyor?
Bence TrimRight burada bir "cutset" (yani karakter kümesi) 'yi buradan kaldırır, burada istediğinizi olmayabilir: http://golang.org/pkg/strings/#TrimRight (ayrıca bkz. TrimSuffix) – rogerdpack
Dene:
basename := "hello.blah"
name := strings.TrimSuffix(basename, filepath.Ext(basename))
TrimSuffix temelde bir nokta ile uzantısıdır sondaki dize kapalı şerit onu söyler.
TrimSuffix docu here
Nedenini açıklayın bu çalışıyor. –
Bunu beğendim, dizi matematiği yapmaktan daha okunabilir görünüyor – rogerdpack
Not 'filepath.Ext (" test.tar.gz ")' döndürür '.gz' istediğiniz ya da olmayabilir. –
- 1. * _son boş son eki
- 2. J'de "__" son eki ne yapar?
- 3. Javascript/jQuery, dizginin isteğe bağlı sözcüklerden biriyle mi yoksa kelime mi içerdiğini kontrol edin
- 4. Nesnede var mı yoksa javascriptte mi var
- 5. Javadoc yorum. İhtiyacınız mı yoksa gereksiz mi?
- 6. Dizin var mı, yoksa linux değil mi?
- 7. SQL Server yerel mi yoksa uzak mı?
- 8. Bir dizginin son 4 karakteri nasıl alınır?
- 9. VBA Bir dizginin son geçtiği yeri bul
- 10. Kalıcı çerez son eki asp.net mvc'de Session olarak ayarlandı mı?
- 11. Envanter_hostname öğesinin son üç karakterinin tek mi, yoksa
- 12. (son eki) ile biter ve SQLite FTS
- 13. Kod Yorumlama: Kod açıklamalarınızı Arayüzlere mi yoksa Beton sınıflarına mı yoksa her ikisine mi yazıyorsunuz?
- 14. x86 RISC mi yoksa CISC mi?
- 15. Başlıkları içeride mi yoksa vizeyle mi?
- 16. - akıllı mı yoksa aptal mı?
- 17. Önek mi yoksa boole değerlerine mi ait
- 18. özel uzantı
- 19. Emac'lerin kasada mı yoksa terminalde mi kontrol edileceği?
- 20. Uluslararasılaştırma: Etiketler için kaynakları mı yoksa MVP mi kullanmalıyım?
- 21. Docker, WSL içinde mi yoksa Windows'a mı bağlanıyor?
- 22. F: olayı f: metadata'sının mı yoksa değil mi?
- 23. C# de yardımcı yöntemler: Statik mi yoksa statik olmayan mı?
- 24. Bu bir kaynak sızıntısı mı, yoksa yanlış pozitif mi?
- 25. Meteor Collection Transform: sunucuda mı yoksa istemcide mi yapıldı? veya
- 26. Dize bir şeye eşit mi yoksa ondan mı büyüktür?
- 27. PermGen alanını mı yoksa kendi dahili yöntem mi kullanıyorsunuz?
- 28. Constexpr: nullptr ile karşılaştırma - Hata mı yoksa özellik mi?
- 29. Groovy yöntemi adlandırma kuralı mı yoksa sihir mi?
- 30. Jinja şablonu, çift tırnak mı yoksa tek tırnak mı yoksa çift tırnak mı, yoksa tek tırnak mı olarak yazıyorsunuz? "
Teşekkürler, sorunumu şimdi çöz. – Coder
strings.TrimSuffix, altta, aynı dizi matematik/indisleri yapar :) – rogerdpack
@rogerdpack, evet insanlar Keith'in cevabını kullanmalıdır. Bu cevabı yazdığımda Go (GoS) 'da mevcut değil (https://code.google.com/p/go/source/diff?spec=svnc7353c98694b135ba941cea93b01e5c0e6a4dd55&old=c0f7c53dcfce43f4921cce7bb2ef7800c752bf4c&r = c7353c98694b135ba941cea93b01e5c0e6a4dd55 ve biçimi = unidiff ve yol =% 2Fsrc% 2Fpkg% 2Fstrings% 2Fstrings.go)). –