2009-07-06 28 views
8

Điều gì sẽ là cách tốt nhất và thành ngữ hơn để chia chuỗi thành hai tại vị trí của dấu chấm cuối cùng? Về cơ bản tách phần mở rộng ra khỏi phần còn lại của đường dẫn trong đường dẫn tệp hoặc URL. Cho đến nay những gì tôi đang làm là Split (".") Và sau đó String.Join (".") Của tất cả mọi thứ nhưng phần cuối cùng. Có vẻ như dùng bazooka để giết ruồi.Cách tốt nhất để phá vỡ một chuỗi trên chấm cuối cùng trên C#

Trả lời

22

Nếu bạn muốn thực hiện, một cái gì đó như:

string s = "a.b.c.d"; 
    int i = s.LastIndexOf('.'); 
    string lhs = i < 0 ? s : s.Substring(0,i), 
     rhs = i < 0 ? "" : s.Substring(i+1); 
5

Bạn có thể sử dụng Path.GetFilenameWithoutExtension()

hoặc nếu điều đó sẽ không làm việc cho bạn:

int idx = filename.LastIndexOf('.'); 

if (idx >= 0) 
    filename = filename.Substring(0,idx); 
+0

Điều đó có hoạt động trên các đoạn URL (sử dụng/thay vì \\) không? Và nó cũng sẽ trả về "thư mục"? Path.GetFilename() chỉ trả về tên của tệp, không có thư mục, AFAIK. – Pablo

+0

Nếu OP chỉ hỏi về đường dẫn tệp, đây sẽ là +1. Nhưng tài liệu System.IO.Path không đề cập đến hỗ trợ cho URL. – OregonGhost

+0

Đúng, nhưng nó có thể đã làm việc cho bạn nếu tên tệp không bao gồm đường dẫn. –

1

Chuỗi phương pháp LastIndexOf có thể sử dụng một số bạn ở đây.

Nhưng các toán tử Đường dẫn hoặc FileInfo sẽ phù hợp hơn với các thao tác dựa trên tên tệp.

0

Tôi nghĩ rằng những gì bạn đang thực sự tìm kiếm là Path.GetFileNameWithoutExtension Method (System.IO) nhưng chỉ dành riêng cho các heck của nó:

string input = "foo.bar.foobar"; 
int lastDotPosition = input.LastIndexOf('.'); 

if (lastDotPosition == -1) 
{ 
    Console.WriteLine("No dot found"); 
} 
else if (lastDotPosition == input.Length - 1) 
{ 
    Console.WriteLine("Last dot found at the very end"); 

} 
else 
{ 
    string firstPart = input.Substring(0, lastDotPosition); 
    string lastPart = input.Substring(lastDotPosition + 1); 

    Console.WriteLine(firstPart); 
    Console.WriteLine(lastPart); 
} 
2

Để có được con đường mà không có phần mở rộng, sử dụng

System.IO.Path.GetFileNameWithoutExtension(fileName) 

và để có được extenstion (bao gồm cả dấu chấm), sử dụng

Path.GetExtension(fileName) 

EDIT:

0.123.

Thật không may GetFileNameWithoutExtension dải ra khỏi con đường dẫn, vì vậy thay vào đó bạn có thể sử dụng:

if (path == null) 
{ 
    return null; 
} 
int length = path.LastIndexOf('.'); 
if (length == -1) 
{ 
    return path; 
} 
return path.Substring(0, length); 
+0

Nó cũng hoạt động với các url – jmservera

1

gì về việc sử dụng phương pháp LastIndexOf mà trả về vị trí tìm thấy cuối cùng của một nhân vật. Sau đó, bạn có thể sử dụng chuỗi con để trích xuất những gì bạn muốn.

1

Chuỗi.LastIndexOf sẽ trả về vị trí của dấu chấm nếu nó tồn tại trong chuỗi. Sau đó bạn có thể String.Substring phương pháp để chia chuỗi.

1

Bạn có thể sử dụng phương thức của chuỗi

LastIndexOf và chuỗi con để hoàn thành nhiệm vụ.

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