lấy tất cả các ký tự ở bên phải của dấu gạch ngang cuối cùng


114

Tôi có những thứ sau:

string test = "9586-202-10072"

Làm thế nào để tôi có được tất cả các ký tự ở bên phải của -dấu gạch ngang cuối cùng để 10072. Số ký tự luôn khác nhau ở bên phải của dấu gạch ngang cuối cùng.

Điều này có thể giải quyết như thế nào?

Câu trả lời:


236

Bạn có thể nhận được vị trí cuối cùng -với str.LastIndexOf('-'). Vì vậy, bước tiếp theo là hiển nhiên:

var result = str.Substring(str.LastIndexOf('-') + 1);

Sửa chữa :

Như Brian tuyên bố bên dưới, việc sử dụng điều này trên một chuỗi không có dấu gạch ngang sẽ dẫn đến việc trả về cùng một chuỗi.


1
Điều này hoạt động ngay cả khi dấu gạch nối là ký tự cuối cùng, trong trường hợp đó, nó trả về chính xác một chuỗi trống. Điều này sẽ chỉ không thành công nếu một trong hai strlà rỗng hoặc nếu nó không chứa dấu gạch ngang. (Trong trường hợp không có gạch nối, nó không ném; nó trả về toàn bộ chuỗi nguồn.)
LukeH

@LukeH: Cảm ơn vì sự quan tâm của bạn. Tôi đã không kiểm tra và nhầm tưởng rằng nó sẽ ném.
Jon

3
Chà, LastIndexOftrả về -1 nếu không tìm thấy gì (đây là hành vi được ghi lại, vì vậy sẽ an toàn khi dựa vào nó). str.Substring(1-1)cung cấp cho bạn một chuỗi bằng str. Không có gì ngạc nhiên, ở đây.
Brian

2
@Brian: Tôi nghĩ rằng tôi đã phá kỷ lục của mình vì hầu hết các sai lầm trong cùng một tuyên bố tầm thường. Bài học: đừng bao giờ viết bất cứ thứ gì mà không đọc lại mã sau thực tế. Cảm ơn.
Jon

57

Bạn có thể sử dụng LINQ và lưu cho mình cách phân tích cú pháp rõ ràng:

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);

5
Điều này có thể sẽ tiết kiệm thời gian nhất cho nhà phát triển, nhưng trong trường hợp chung, hãy lưu ý rằng mã như thế này sẽ có nhiều phân bổ chuỗi (có thể là bốn trong ví dụ trên) vì vậy có thể được nhấn mạnh trong các phần quan trọng về hiệu suất.
Charles Burns

5
string tail = test.Substring(test.LastIndexOf('-') + 1);

4
YourString.Substring(YourString.LastIndexOf("-"));

4
nếu bạn loại trừ "+ 1" ở cuối, thì đầu ra sẽ chứa ký tự đặc biệt cùng với chuỗi.
Meena

3

Tôi có thể thấy bài đăng này đã được xem hơn 46.000 lần. Tôi dám cá rằng nhiều người trong số 46.000 người xem đang hỏi câu hỏi này đơn giản vì họ chỉ muốn tên tệp ... và những câu trả lời này có thể là một lỗ hổng nếu bạn không thể thực hiện đúng nguyên văn chuỗi con của mình bằng cách sử dụng dấu tại.

Nếu bạn chỉ muốn lấy tên tệp, thì có một câu trả lời đơn giản nên được đề cập ở đây. Ngay cả khi nó không phải là câu trả lời chính xác cho câu hỏi.

result = Path.GetFileName(fileName);

xem https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx




1
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");

if (indexOfHyphen >= 0)
{
    string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
    Console.WriteLine(contentAfterLastHyphen );
}

0

Tôi đã tạo một phần mở rộng chuỗi cho việc này, hy vọng nó sẽ hữu ích.

public static string GetStringAfterChar(this string value, char substring)
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
            var index = value.LastIndexOf(substring);
            return index > 0 ? value.Substring(index + 1) : value;
        }

        return string.Empty;
    }
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.