2011-12-28 45 views
6

Im cố gắng để có được sự xuất hiện đầu tiên tại điểm chuỗi con bắt đầu của tôi ai đó có thể giúp tôiLàm thế nào để có được sự xuất hiện đầu tiên của một char trong xâu

string dir = Request.MapPath(Request.ApplicationPath) + "\\App_GlobalResources\\"; 

foreach (var file in Directory.EnumerateFiles(dir, "*.resx")) 
{ 
    ddlResources.Items.Add(new ListItem { Text = file.Substring(firstoccuranceof("."), file.LastIndexOf(".")), Value = file }); 
} 

nếu tôi làm file.Substring (file.IndexOf (". "), file.LastIndexOf (". ")) tôi nhận được một lỗi

+0

Bạn có thể đưa ra một ví dụ cụ thể cho một chuỗi đã cho không, bạn muốn nhận gì? Ví dụ: Nếu chuỗi là '" Hello_world.jpg "' kết quả là gì? –

+0

Bạn có lỗi cú pháp, cụ thể là sử dụng '{' '}' như trong: new ListItem {...}. Ngoài ra, tại sao bạn chỉ định Text = và Value = ... họ không làm bất cứ điều gì, và cuối cùng bạn có thể có nghĩa là để có được tên của tập tin mà không có phần mở rộng .resx và bạn nhận được rằng bằng cách sử dụng: file.Substring (0, fileLastIndexOf (".")) –

Trả lời

10

Để trả lời câu hỏi thực tế của bạn - bạn có thể sử dụng string.IndexOf để có được sự xuất hiện đầu tiên của một ký tự. Lưu ý rằng bạn sẽ cần trừ giá trị này khỏi cuộc gọi LastIndexOf của mình, vì tham số thứ hai của Substring là số ký tự cần tìm nạp chứ không phải chỉ mục bắt đầu và kết thúc.

Tuy nhiên ... Thay vì phân tích cú pháp tên, bạn chỉ có thể sử dụng Path.GetFilenameWithoutExtension để nhận tên tệp trực tiếp.

+0

bạn có thể chỉ cho tôi ý của bạn là gì không, tôi đã thử nó theo cách này file.Substring (file.IndexOf ("."), File.LastIndexOf (".")) – ONYX

+0

@KDM Bạn đang cố gắng đạt được điều gì? Bạn có thể cần 'file.Substring (file.IndexOf (". "), File.LastIndexOf (". ") - file.IndexOf (". "))' - nhưng GetFilenameWithoutExtension có thể tốt hơn ở đây ... –

+0

+1 không chỉ nói cách họ nên "làm thay thế", mà còn trả lời câu hỏi đã cho _and also_ cung cấp phương pháp thay thế – elmer007

5

Đầu tiên điều xảy ra

String.IndexOf('.') 

điều xảy ra cuối

String.LastIndexOf('.') 
+0

tôi đã thử file.IndexOf (".") Nhưng tôi gặp lỗi – ONYX

+0

Lỗi gì? Có thể chúng tôi biết thực sự thấy những gì không thành công cho bạn? – King

6

Sử dụng các phương thức chuỗi IndexOfLastIndexOf để nhận chỉ mục xuất hiện đầu tiên và cuối cùng của chuỗi "tìm kiếm". Bạn có thể sử dụng các phương thức System.IO.Path.GetExtension(), System.IO.Path.GetFileNameWithoutExtension()System.IO.Path.GetDirectoryName() để phân tích đường dẫn.

Ví dụ,

string file = @"c:\csnet\info.sample.txt"; 
Console.WriteLine(System.IO.Path.GetDirectoryName(file));   //c:\csnet 
Console.WriteLine(System.IO.Path.GetFileName(file));    //info.sample.txt 
Console.WriteLine(System.IO.Path.GetFileNameWithoutExtension(file));//info.sample 
Console.WriteLine(System.IO.Path.GetExtension(file));    //.txt 
+1

Tôi nghĩ đây là những gì anh ta cần, để lấy tên tệp mà không có đường dẫn và mở rộng. –

+1

Có. Anh ta đang làm điều này bằng cách vòng quanh. Anh ta thậm chí có thể sử dụng phân chia và nhận các chuỗi thay vì chuỗi con cho nhiệm vụ này. Câu trả lời này là tốt nhất cho nhiệm vụ của mình – King

0

Tôi nghĩ rằng trong trường hợp cụ thể của bạn, bạn không cố gắng để có được IndexOf ... Thay vào đó bạn cần phải sử dụng 0 bởi vì bạn đang cố gắng để tạo ra một chìa khóa dựa trên tên tập tin nếu hiểu một cách chính xác:

`ddlResources.Items.Add(new ListItem(file.Substring(0, file.LastIndexOf(".")), file));` 

Ngoài ra, bạn có '{}' trong đó như trong ListItem mới {...} cũng sẽ gây ra một lỗi cú pháp ... Nhưng dù sao có một cái nhìn ..

1

file.IndexOf (".")

Nên giúp bạn có được sự xuất hiện đầu tiên của ".". Nếu không, nó sẽ trả về -1 nếu không tìm thấy.

0

Vì câu hỏi gốc được đánh dấu bằng thẻ [regex], tôi sẽ cung cấp giải pháp sau, tuy nhiên câu trả lời tốt nhất để phân tích cú pháp đơn giản đường dẫn bằng .NET không phải bởi regex.

//extracts "filename" from "filename.resx" 
string name = Regex.Match("filename.resx", @"^(.*)\..+?$").Groups[1].Value; 

Sử dụng câu trả lời dựa trên lớp Path để thay thế, để đơn giản. Các câu trả lời khác chứa thông tin đó.

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