Cách lấy năm ký tự đầu tiên của Chuỗi


133

Tôi đã đọc câu hỏi này để có được char đầu tiên của chuỗi. Có cách nào để có được n số ký tự đầu tiên từ một chuỗi trong C # không?


Câu hỏi trước là hỏi về char** s và bạn đang hỏi về ** ký tự . Chúng không giống nhau. 𣊾𣇞là hai ký tự tôi cần sử dụng chỉ mới hôm qua đã thất bại trong phần mềm được viết bằng C # tôi đang sử dụng vì lập trình viên không biết sự khác biệt giữa a charvà ký tự. Đừng rơi vào cái bẫy này!
hà mã

Câu trả lời:


218

Bạn có thể sử dụng Enumerable. Thực hiện như:

char[] array = yourStringVariable.Take(5).ToArray();

Hoặc bạn có thể sử dụng String.Sub chuỗi .

string str = yourStringVariable.Substring(0,5);

Hãy nhớ rằng String.Substringcó thể đưa ra một ngoại lệ trong trường hợp độ dài của chuỗi nhỏ hơn các ký tự được yêu cầu.

Nếu bạn muốn lấy lại kết quả trong chuỗi thì bạn có thể sử dụng:

  • Sử dụng String Con constructor và LINQ's Take

    string firstFivChar = new string(yourStringVariable.Take(5).ToArray());

Điểm cộng với cách tiếp cận là không kiểm tra độ dài trước khi ra tay.

  • Một cách khác là sử dụng String.Substringvới kiểm tra lỗi

giống:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;

3
chuỗi val = chuỗi mới (yourStringVariable.Take (6) .ToArray ()); nhưng Chuỗi con sẽ lỗi nếu độ dài củaStringVariable của bạn nhỏ hơn 5
Moji

1
IsNullOrWhiteSpacesai ở đây Hãy xem xét một chuỗi có 10 khoảng trống - mã của bạn sẽ trả về tất cả 10. IsNullOrEmptyThay vào đó hãy sử dụng . (Nó không phải là tốt để kết hợp IsNullOrWhiteSpacevới bất kỳ thử nghiệm khác; Thay vì kiểm tra for null + trống rỗng, sau đó Trimnếu được chỉ định hành vi, sau đó làm bất cứ điều gì kiểm tra / hoạt động là cần thiết.)
ToolmakerSteve

1
Bạn có thể lưu một cuộc gọi đến ToArray () bằng cách sử dụng String.Concat () như vậy: string firstFivChar = String.Concat (yourStringVariable.Take (5));
BlueFuzzyThing


38

Bạn có thể sử dụng Chuỗi con (int start Index, int length)

string result = str.Substring(0,5);

Chuỗi con bắt đầu tại một vị trí ký tự được chỉ định và có độ dài được chỉ định. Phương pháp này không sửa đổi giá trị của thể hiện tại. Thay vào đó, nó trả về một chuỗi mới với các ký tự có độ dài bắt đầu từ vị trí start Index trong chuỗi hiện tại, MSDN

Nếu chuỗi nguồn nhỏ hơn năm ký tự thì sao? Bạn sẽ có được ngoại lệ bằng cách sử dụng phương pháp trên. Chúng ta có thể đặt điều kiện để kiểm tra xem số lượng ký tự trong chuỗi có nhiều hơn 5 hay không, sau đó lấy năm ký tự đầu tiên thông qua Chuỗi con. Lưu ý Tôi đã gán chuỗi nguồn cho biến FirstFiveChar. FirstFiveChar không thay đổi nếu các ký tự nhỏ hơn 5, vì vậy phần khác không bắt buộc.

string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);

29

Không ai đề cập đến cách thực hiện kiểm tra thích hợp khi sử dụng Substring(), vì vậy tôi muốn đóng góp về điều đó.

Nếu bạn không muốn sử dụng Linqvà đi cùng Substring(), bạn phải đảm bảo rằng chuỗi của bạn lớn hơn tham số thứ hai (độ dài) của Substring()hàm.

Giả sử bạn cần 5 ký tự đầu tiên. Bạn nên kiểm tra chúng, như thế này:

string title = "love" // 15 characters
var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5);

// firstFiveChars: "love" (4 characters)

Nếu không có kiểm tra này, Substring()hàm sẽ đưa ra một ngoại lệ vì nó sẽ lặp qua các chữ cái không có ở đó.

Tôi nghĩ rằng bạn có được ý tưởng...


đáng yêu thêm chút thông tin
Rob85

Tôi vui bạn thích nó.
ilter

Điều này đã giúp tôi rất nhiều, nhưng bạn có thể giải thích chính xác những gì nó đang làm trong dòng đó không?
jimbob

Tôi sẽ kiểm tra một số ví dụ về chuỗi con. Nó lấy tham số cho các chỉ mục. Chỉ số bắt đầu là 0. Nếu bạn viết bất cứ điều gì lớn hơn (hoặc nhỏ hơn, đối với vấn đề đó) so với chỉ mục cuối cùng của bất kỳ mảng nào, bạn sẽ nhận được ngoại lệ chỉ mục. Kiểm tra đó, trong ví dụ là để tránh ngoại lệ đó.
ilter

Hahhahaha! :) Đó là một câu hỏi mà tôi đã trả lời. Tôi có nên để câu hỏi đó chưa được trả lời? :)
ilter

18

Vấn đề với .Substring(,)là, bạn cần chắc chắn rằng chuỗi đã cho có ít nhất độ dài của số ký tự được hỏi, nếu không ArgumentOutOfRangeExceptionsẽ bị ném.

Giải pháp 1 (sử dụng 'Chuỗi con'):

var firstFive = stringValue != null ? 
                   stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) :
                   null;

Hạn chế của việc sử dụng .Substring(là bạn sẽ cần kiểm tra độ dài của chuỗi đã cho.

Giải pháp 2 (sử dụng 'Lấy'):

var firstFive = stringValue != null ? 
                    string.Join("", stringValue.Take(5)) : 
                    null;

Sử dụng 'Take' sẽ ngăn bạn cần kiểm tra độ dài của chuỗi đã cho.


13

Sử dụng chức năng PadRight để ngăn chuỗi quá ngắn, lấy những gì bạn cần sau đó cắt bớt khoảng trắng từ cuối tất cả trong một câu lệnh.

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();

1
Đây là giải pháp tốt hơn cho đến nay. Chỉ sử dụng Chuỗi con có thể gây ra lỗi khi độ dài của chuỗi thấp hơn độ dài chuỗi con.
Asiri Dissanayaka

thay thế tốt nhất cho chức năng LEFT mà chúng tôi sử dụng trong SQL Server
vibs2006

11

Tôi không biết tại sao mọi người đề cập đến điều này. Nhưng đó là cách ngắn nhất và đơn giản nhất để đạt được điều này.

string str = yourString.Remove(n);

n - số lượng ký tự mà bạn cần

Thí dụ

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141

3
Đây là nội bộ giống như "this.Sub chuỗi (0, 5)", vì vậy bạn cần đảm bảo chuỗi có độ dài phù hợp.
PersyJack

Trong trường hợp bạn muốn n ký tự đầu tiên, điều này chỉ hoạt động nếu bạn biết độ dài của chuỗi. Nếu độ dài có thể thay đổi, điều này sẽ không luôn luôn hoạt động. Tôi biết điều đó có thể rõ ràng với hầu hết, nhưng chỉ cần đề cập đến nó cho bất kỳ ai đi ngang qua ...
user1289451

10

Nối năm ký tự khoảng trắng sau đó cắt bỏ năm ký tự đầu tiên và cắt kết quả. Số lượng khoảng trắng bạn nối phải khớp với số lượng bạn đang cắt. Hãy chắc chắn bao gồm dấu ngoặc đơn trước .Substring(0,X)hoặc bạn sẽ không thêm gì.

string str = (yourStringVariable + "    ").Substring(0,5).Trim();

Với kỹ thuật này, bạn sẽ không phải lo lắng về ArgumentOutOfRangeExceptioncác câu trả lời khác.


1
chết tiệt, tôi sẽ đăng nó !! nâng cao. (đó là năm 2019, tại sao không thể có một phương thức trên chuỗi thực hiện những gì Mid $ đã làm vào năm 1985? Đối với những người nói rằng 'bạn không nên làm điều đó' OK, bạn hãy viết mã cho tôi ... bạn sẽ phải làm điều đó ...)
FastAl

7
string str = "GoodMorning"

string strModified = str.Substring(0,5);

2
sẽ lỗi nếu độ dài của biến "str" ​​nhỏ hơn 5
Moji

6

Chỉ cần một cái đầu lên là có một cách mới để làm điều này trong các toán tử C # 8.0: Range

Tài liệu Microsoft

Hoặc như tôi muốn gọi em, Pandas lát.

Cách cũ:

string newString = oldstring.Substring(0, 5);

Cách mới:

string newString = oldstring[..5];

Thoạt nhìn có vẻ như một sự đánh đổi khá tệ về khả năng đọc mã ngắn hơn nhưng tính năng mới mang lại cho bạn

  1. một cú pháp tiêu chuẩn để cắt các mảng (và do đó là chuỗi)
  2. những thứ tuyệt vời như thế này:

    var lát1 = danh sách [2 .. ^ 3]; // danh sách [Range.Create (2, Index.CreateFromEnd (3))]

    var lát2 = danh sách [.. ^ 3]; // danh sách [Range.ToEnd (Index.CreateFromEnd (3))]

    var lát3 = danh sách [2 ..]; // danh sách [Range.FromStart (2)]

    var lát4 = danh sách [..]; // danh sách [Phạm vi. Tất cả]


3

Để có được n số ký tự đầu tiên từ một chuỗi trong C #

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);

2

Dưới đây là một phương thức mở rộng để kiểm tra xem một chuỗi có lớn hơn những gì cần thiết hay không và rút ngắn chuỗi thành số lượng ký tự tối đa được xác định và nối thêm '...'.

public static class StringExtensions
{
    public static string Ellipsis(this string s, int charsToDisplay)
    {
        if (!string.IsNullOrWhiteSpace(s))
            return s.Length <= charsToDisplay ? s : new string(s.Take(charsToDisplay).ToArray()) + "...";
        return String.Empty;
    }
}


1

Tôi sử dụng:

var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);

hoặc thay thế nếu bạn cũng muốn kiểm tra Whitespace (thay vì chỉ Null):

var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue

1

Hoặc bạn có thể sử dụng String.ToCharArray () .
Nó nhận int startindexvà và int lengthnhư các tham số và trả về mộtchar[]

new string(stringValue.ToCharArray(0,5))

Bạn vẫn cần đảm bảo chuỗi có độ dài phù hợp, nếu không nó sẽ ném ArgumentOutOfRangeException


1

Vui lòng thử mã này khi str nhỏ hơn 5.

string strModified = str.Substring(0,str.Length>5?5:str.Length);

0

Nếu chúng tôi chỉ muốn 5 ký tự đầu tiên từ bất kỳ trường nào, thì có thể đạt được điều này bằng Thuộc tính trái

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""


-3

Tôi đã thử các câu trả lời trên và tốt nhất tôi nghĩ là câu trả lời này

@item.First_Name.Substring(0,1)

Trong đó tôi có thể nhận được chữ cái đầu tiên của chuỗi

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.