2011-10-13 44 views
6

Tôi có một chuỗi động được hình thành như thế nào - part1.abc.part2.abc.part3.abcNhận Thứ hai đến vị trí ký tự cuối cùng từ chuỗi

Trong chuỗi này, tôi muốn biết vị trí của thứ hai để kéo dài "" để tôi có thể tách chuỗi thành part1.abc.part2.abc và part3.abc

cho tôi biết có phương pháp trực tiếp nào để có được điều này không?

+0

không rõ bạn muốn gì. bạn có muốn chia 'a.b.c' thành' a, b, c' không? – Deeptechtons

+1

Bạn có thể nhận được một mảng các chuỗi khi bạn chia nhỏ ('.'), 2 từ cuối cùng của mảng là "part3" và "abc". Chơi xung quanh với điều này – Rob

+1

Tách nhiều chuỗi (chỉ để có được hai cuối) *** có thể *** là một vấn đề bộ nhớ/hiệu suất, rất nhiều chuỗi vô dụng sẽ được tạo ra. – bitbonk

Trả lời

14
string str = "part1.abc.part2.abc.part3.abc"; 
int ix1 = str.LastIndexOf('.'); 
int ix2 = ix1 > 0 ? str.LastIndexOf('.', ix1 - 1) : -1; 

Luôn luôn có những người yêu Regexes (và jQuery), vì vậy tôi sẽ cung cấp một giải pháp Regex (đối với giải pháp jQuery bạn sẽ phải đợi :-)):

var match = Regex.Match(str, @"\.[^\.]*\.", RegexOptions.RightToLeft); 
int ix = match.Success ? match.Index : -1; 

(lưu ý rằng tôi là hater của Regexes, tôi đưa nó cho bạn để bạn có thể có đủ dây để treo mình nếu bạn chọn).

Lưu ý rằng tôi đang sử dụng tùy chọn RegexOptions.RightToLeft để Regex bắt đầu ở ký tự cuối cùng.

5

Bạn có thể sử dụng phương pháp String.LastIndexOf('.') để có được vị trí của người cuối cùng full-stop/thời gian, sau đó sử dụng vị trí đó trong một cuộc gọi thứ hai để LastIndexOf('.') để có được cuối cùng nhưng một, ví dụ:

string aString = "part1.abc.part2.abc.part3.abc"; 
int lastPos = aString.LastIndexOf('.'); 

int lastPosButOne = aString.LastIndexOf('.', lastPos - 1); 

Nhưng Tôi khuyên bạn nên sử dụng String.Split('.') sẽ cung cấp cho bạn một loạt các phần chuỗi, sau đó bạn có thể lấy phần cuối cùng nhưng một, ví dụ

string aString = "part1.abc.part2.abc.part3.abc"; 
string[] parts = aString.Split('.'); 

string lastPartButOne = parts[parts.Length - 1]; 
1

Bạn có thể sử dụng phương pháp String.Split(), trả về một mảng các mục được chia nhỏ. Sau đó, bạn có thể ghép nối 2 đầu tiên và rời khỏi cái cuối cùng.

1

Thử chuỗi lớp LastIndexOf phương pháp.

1

gì về "part1.abc.part2.abc.part3.abc".Split('.') trong trường hợp này bạn sẽ nhận được một mảng của tất cả các chuỗi con

Hope this helps.

2

Theo như tôi biết không có giải pháp ngoài hộp nào. Một cách tiếp cận sẽ là tìm "cuối cùng". với LastIndexOf của chuỗi, và sau đó tìm kiếm điểm cuối cùng một lần nữa, lần này bằng cách sử dụng quá tải cho phép bạn chỉ định startindex và đếm, sử dụng chỉ mục của cuộc gọi đầu tiên làm tham số để đếm.

0

này sẽ là giải pháp, với hiệu suất tốt nhất có thể (có lẽ nó sẽ không nhận được nhanh hơn và nhớ nhiều trọng lượng nhẹ hơn này, trừ khi bạn muốn đi con đường không an toàn ):

public static int LastIndexOf(this string str, char charToSearch, int repeatCound) 
{ 
    int index = -1; 
    for(int i = str.Length - 1; i >= 0, numfound < repeatCound) 
    { 
     if(str[i] == charToSearch) 
     { 
      index = i; 
      numfound++; 
     } 
    } 

    return index; 
} 
1

Dựa về câu trả lời của @ bitbonk. Tôi đã sử dụng mã bên dưới là bản sao của hàm RAT() của VFP.

public static int RightIndexAt(this string expressionToSearch, char charToSearch, int occurence) 
    { 
     //Validate parameter 
     if (occurence < 1) 
      return -1; 

     int index = -1; 
     int numfound = 0; 

     for (int count = expressionToSearch.Length - 1; count >= 0; count--) 
     { 
      if (expressionToSearch[count].Equals(charToSearch)) 
      { 
       index = count; 
       numfound++; 
      } 

      if (numfound.Equals(occurence)) 
       break; 
     } 

     return numfound < occurence ? -1 : index; 
    } 
4

Dưới đây là một giải pháp:

  string aString = "part1.abc.part2.abc.part3.abc"; 
     // Getting string until last dot 
     var untilLastDot = aString.Substring(0, aString.LastIndexOf(".")); 
     // Now we have string until last dot and last dot here will be last but one 
     // and getting text from last but one dot to end 
     string lastWordButOne = aString.Substring(untilLastDot.LastIndexOf(".") + 1); 
     // Result: part3.abc 

hy vọng giúp, Cảm ơn bạn!

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