Ví dụ, tôi có một chuỗi, bao gồm "sample.zip". Làm thế nào để loại bỏ phần mở rộng ".zip" bằng cách sử dụng gói chuỗi hoặc khác?Hậu tố hoặc đuôi mở rộng của chuỗi cắt?
Trả lời
Chỉnh sửa: Đi đã chuyển sang. Vui lòng xem Keith's answer.
Sử dụng path/filepath.Ext để nhận tiện ích. Sau đó, bạn có thể sử dụng độ dài của tiện ích mở rộng để truy xuất chuỗi con trừ đi phần mở rộng.
var filename = "hello.blah"
var extension = filepath.Ext(filename)
var name = filename[0:len(filename)-len(extension)]
Hoặc bạn có thể sử dụng strings.LastIndex để tìm giai đoạn cuối cùng (.) Nhưng điều này có thể nhiều hơn một chút mong manh trong đó sẽ có trường hợp cạnh (ví dụ như không có phần mở rộng) mà filepath.Ext
xử lý mà bạn có thể cần phải viết mã cho một cách rõ ràng, hoặc nếu Go được chạy trên một O/S lý thuyết sử dụng dấu tách mở rộng khác với khoảng thời gian.
cách này hoạt động quá:
var filename = "hello.blah"
var extension = filepath.Ext(filename)
var name = TrimRight(filename, extension)
nhưng có lẽ phương pháp Paul Ruane là hiệu quả hơn?
Tôi nghĩ TrimRight ở đây loại bỏ một "cutset" (tức là ký tự đặt) từ cuối, có thể không phải là những gì bạn muốn ở đây: http://golang.org/pkg/strings/#TrimRight (xem thêm TrimSuffix) – rogerdpack
Hãy thử:
basename := "hello.blah"
name := strings.TrimSuffix(basename, filepath.Ext(basename))
TrimSuffix cơ bản cho nó cởi chuỗi dấu đó là phần mở rộng với một dấu chấm.
TrimSuffix docu here
Giải thích lý do tại sao những công việc này. –
Tôi thích cái này, có vẻ dễ đọc hơn làm toán mảng – rogerdpack
Lưu ý rằng 'filepath.Ext (" test.tar.gz ")' trả về '.gz' có thể hoặc không thể là thứ bạn muốn. –
- 1. Đuôi mở rộng tệp trong Emacs
- 2. cắt đuôi đuôi ilabel
- 3. Tạo cây hậu tố của chuỗi S [2..m] từ cây hậu tố của chuỗi S [1..m]
- 4. Sử dụng lệnh đuôi mở rộng rhc
- 5. Mảng hậu tố và cây hậu tố
- 6. Naming ước JUnit hậu tố hoặc tiền tố thử nghiệm
- 7. thực hiện cây hậu tố trong python
- 8. C# - Numeric hậu tố
- 9. Cách thức và thời điểm tạo liên kết hậu tố trong cây hậu tố?
- 10. Số hậu tố cho ngắn
- 11. kết thúc bằng (hậu tố) và chứa tìm kiếm chuỗi bằng MATCH trong SQLite FTS
- 12. chức năng pthread "_np" hậu tố
- 13. Số nguyên thủy và hậu tố của chúng
- 14. Hiểu thuật toán của Ukkonen cho hậu tố cây
- 15. Ý nghĩa của "Lõi" là hậu tố tên thành viên
- 16. Cách tách tệp bằng hậu tố số
- 17. ULL hậu tố vào một số chữ
- 18. Hậu tố 'h' có nghĩa là gì?
- 19. Làm việc với các cây hậu tố ở trăn
- 20. Mở rộng chuỗi và biến trong bash
- 21. Chuyển đổi Tiện ích mở rộng của Google Chrome sang tiện ích mở rộng của Firefox hoặc Safari
- 22. Mở rộng MKPolylines hoặc tạo nhiều MKPolylines?
- 23. Django: Mở rộng hoặc bao gồm?
- 24. Mở rộng AuthorizeAttribute Override AuthorizeCore hoặc OnAuthorization
- 25. kiểm tra các hậu tố của các file đối tượng ... configure: lỗi: không thể tính toán hậu tố của các file đối tượng: không thể biên dịch
- 26. Phương pháp mở rộng chuỗi trong C#
- 27. Xóa các tiền tố và hậu tố khỏi các từ trong C#
- 28. Thuật toán xây dựng chuỗi hậu tố hiện đại nhất là gì?
- 29. làm thế nào để cắt mảng vector char hoặc chuỗi?
- 30. Lợi thế chính của việc mở rộng lớp Thread (hoặc khi mở rộng Thread thay vì thực hiện runnable)
Cảm ơn, giải quyết sự cố của tôi ngay bây giờ. – Coder
strings.TrimSuffix, bên dưới, không cùng một mảng toán/chỉ số :) – rogerdpack
@rogerdpack, có người nên sử dụng câu trả lời của Keith. 'TrimSuffix' không tồn tại trong Go khi tôi viết câu trả lời này (nó đã được thêm vào trong Go 1.1 vào tháng 2 năm 2013] (https://code.google.com/p/go/source/diff?spec=svnc7353c98694b135ba941cea93b01e5c0e6a4dd55&old=c0f7c53dcfce43f4921cce7bb2ef7800c752bf4c&r = c7353c98694b135ba941cea93b01e5c0e6a4dd55 & format = unidiff & path =% 2Fsrc% 2Fpkg% 2Fstrings% 2Fstrings.go)). –