2010-10-21 40 views
11

Theo như tôi hiểu, một URL bao gồm các lĩnh vực folowing:Bạn có thể chia sẻ liên kết đến triển khai phân tích cú pháp URL không?

  • Protocol (http, https, ftp, vv)
  • User name
  • tài khoản Mật khẩu
  • chủ địa chỉ (một địa chỉ IP hoặc một FQDN DNS)
  • Cảng (có thể ngụ ý)
  • Đường dẫn đến một tài liệu bên trong tài liệu máy chủ gốc
  • Set của argume nts và đánh giá cao
  • Document phần (#)

như

protocol://user:[email protected]:port/path/document?arg1=val1&arg2=val2#part

Tôi cần một mã số để có được giá trị (hoặc giá trị null/trống nếu không xác định) của bất kỳ của các lĩnh vực này từ bất kỳ trao Chuỗi URL. Tôi có thực hiện điều này bản thân mình hoặc đã có một mã cho điều này vì vậy tôi không cần phải phát minh ra một bánh xe?

Tôi đặc biệt quan tâm đến mã Scala hoặc Java. Mã C#, PHP, Python hoặc Perl cũng có thể hữu ích.

Trả lời

3

Trong Java, chỉ cần sử dụng URL class. Nó cung cấp các phương thức như getProtocol, getHost, v.v. để có được các phần khác nhau của URL.

8

Sử dụng lớp java.net.URI cho việc này. URL dành cho tài nguyên thực và giao thức thực. URI là cho các giao thức và tài nguyên có thể không tồn tại.

+0

Vậy tại sao tôi nên sử dụng URI cho URL nếu tôi định sử dụng địa chỉ của các trang web thực sự? – Ivan

+0

Vì bạn đã yêu cầu thực hiện phân tích cú pháp, đó là những gì java.net.URI là. java.net.URL là một cơ chế kết nối. – EJP

0

URL không hỗ trợ ldap theo mặc định. Người ta có thể mở rộng URL và thêm các giao thức, nhưng tôi đã kết thúc với một trình phân tích cú pháp đơn giản và một lớp mới nhỏ.

0

Dựa trên @Codemwnci câu trả lời, đây là một ví dụ đầy đủ để có được những filename từ một url có hoặc không có đối số:

URL videoUrl = new URL("https://somesite.com/path/v/t43.1792-2/1186696120_n.mp4?efg=something"); 
String videoFileName = videoUrl.getPath().substring(videoUrl.getPath().lastIndexOf("/") + 1); 

1186696120_n.mp4

Các vấn đề liên quan