Java: Lấy chuỗi con từ một chuỗi bắt đầu sau một ký tự cụ thể


196

Tôi có một chuỗi:

/abc/def/ghfj.doc

Tôi muốn giải nén ghfj.doc từ cái này, tức là chuỗi con sau cái cuối cùng /, hoặc cái đầu tiên /từ bên phải.

Ai đó có thể vui lòng cung cấp một số trợ giúp?


38
Hãy nhìn xem, tôi hiểu giá trị của việc tự tìm kiếm câu trả lời trước khi đặt câu hỏi, nhưng thực tế vấn đề là câu hỏi này giúp cho việc tìm kiếm của tôi dễ dàng hơn nhiều .. chính xác những gì tôi muốn sau lần đánh đầu tiên. Nhanh hơn tư vấn javadocs. Thật tốt khi câu hỏi này ở đây. Tại sao các downvote?
Eric

3
Mặc dù điều này hơi khác so với câu hỏi ban đầu của bạn: Trong ví dụ của bạn org.apache.commons.io.FilenameUtils.getBaseName đáng tin cậy hơn nhiều so với thực hiện các hoạt động chuỗi của riêng bạn.
Đến

4
@Eric Tôi hoàn toàn đồng ý với nhận xét của bạn vì đây là kết quả đầu tiên của Google cho câu hỏi của tôi và câu trả lời được chấp nhận là chính xác những gì tôi cần sử dụng.
nối

Câu trả lời:



42

Một cách thực hiện rất đơn giản với String.split():

String path = "/abc/def/ghfj.doc";
// Split path into segments
String segments[] = path.split("/");
// Grab the last segment
String document = segments[segments.length - 1];

1
mã này sẽ đưa ra một lỗi Array Index Out of Bound nếu không tìm thấy dấu phân cách.
Patrick Parker

36

bạn đã thử gì nó rất đơn giản:

String s = "/abc/def/ghfj.doc";
s.substring(s.lastIndexOf("/") + 1)

23

Một cách khác là sử dụng cái này .

String path = "/abc/def/ghfj.doc"
String fileName = StringUtils.substringAfterLast(path, "/");

Nếu bạn truyền null cho phương thức này, nó sẽ trả về null. Nếu không có kết quả khớp với dấu phân cách, nó sẽ trả về chuỗi rỗng.


1
Cuối cùng, một cái gì đó thực sự tiện dụng, không biết về phương pháp này. Tôi ghét làm phiền với chuỗi con + indexof + 1 - 2 +3. Cái này sạch hơn nhiều :)
BAERUS

Nếu bạn muốn sử dụng phương pháp này trên Android, bạn phải nhập StringUtilsthư viện, câu trả lời này cho thấy nóng để thực hiện: stackoverflow.com/a/33935645/2966583
stramin

9

Bạn có thể sử dụng chung Apache:

Đối với chuỗi con sau lần xuất hiện cuối cùng, sử dụng phương pháp này .

Và cho chuỗi con sau khi phương thức tương đương xuất hiện đầu tiên là ở đây .


4

Điều này cũng có thể có được tên tệp

import java.nio.file.Paths;
import java.nio.file.Path;
Path path = Paths.get("/abc/def/ghfj.doc");
System.out.println(path.getFileName().toString());

Sẽ in ghfj.doc



1

Trong Kotlin bạn có thể sử dụng substringAfterLast, chỉ định một dấu phân cách.

val string = "/abc/def/ghfj.doc"
val result = url.substringAfterLast("/")
println(result)
// It will show ghfj.doc

Từ tài liệu :

Trả về một chuỗi con sau lần xuất hiện cuối cùng của dấu phân cách. Nếu chuỗi không chứa dấu phân cách, trả về thiếuD006iterValue mặc định cho chuỗi gốc.


0

Tôi nghĩ rằng sẽ tốt hơn nếu chúng ta sử dụng trực tiếp chức năng phân tách

String toSplit = "/abc/def/ghfj.doc";

String result[] = toSplit.split("/");

String returnValue = result[result.length - 1]; //equals "ghfj.doc"

mã này sẽ đưa ra một lỗi nếu không tìm thấy dấu phân cách.
Patrick Parker

@PatrickParker Tại sao bạn nhận xét ở khắp mọi nơi rằng nó sẽ gây ra lỗi nếu không tìm thấy dấu phân cách. Nếu bạn đang làm nó vì mục đích kiến ​​thức thì không sao, nhưng tôi chỉ nghĩ rằng nó hơi quá một chút có lẽ ...
Gaurav Mall

@GauravMall Tôi đang giúp mọi người cải thiện câu trả lời của họ, viết mã tốt hơn và cho những người đang truy cập để giúp họ tránh những cạm bẫy và xây dựng sự hiểu biết về mã trước khi họ dán mã vào đâu đó. Tôi sẽ sẵn sàng xóa bình luận của tôi một khi câu trả lời được cải thiện. Ngoài ra, viết nó ở hai nơi hầu như không "ở khắp mọi nơi". Cuối cùng, phần bình luận không dành cho thảo luận meta.
Patrick Parker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.