C #: làm thế nào để có được char đầu tiên của chuỗi?


177

Đầu tiên charcủa một chuỗi có thể được lấy bằng cách làm như sau?

MyString.ToCharArray[0]

4
Bạn đã học được gì khi bạn thử nó?
Michael Petrotta

1
@Michael: Có lỗi trình biên dịch. Bạn định sử dụng ToCharArray như thế nào nếu không phải theo cách này?
Craig Johnston

3
Đối với bản ghi, ToCharArraylà một phương thức , bạn nên chạy nó trước, ví dụ char[] chars = str.ToCharArray();, sau đó sử dụng char first = chars[0];. Bạn cũng có thể bán thịt nó vào str.ToCharArray()[0];. Dù bằng cách nào, hãy đảm bảo bạn kiểm tra chuỗi không rỗng và có ít nhất một ký tự - bạn có thể thực hiện bằng cách sử dụng if(!String.IsNullOrEmpty(str)).
Kobi

1
Craig .. việc sử dụng ToCharArray là sai. Xem câu trả lời của tôi.
Naya

4
Bạn muốn nhân vật đầu tiên charhay đầu tiên ? Nếu bạn thử cách này và nó có vẻ hoạt động, hãy thử lại với hoặc cả hai đều thất bại trong chương trình tôi đang sử dụng được viết bằng C # với lỗi chính xác này. 𣊾𣇞
hà mã

Câu trả lời:



56

Mystring[0] nên là đủ


51
Không nên dành thêm năm giây để gõ các từ, "nên là đủ".
Robert Harvey

Ai trả lời câu hỏi này trước?
Craig Johnston

Chọn tab cũ nhất để xem đó là Matthew
johnc

10
@johnc: Hoặc tốt hơn, di chuột qua dấu thời gian.
Jeff Mercado

21

Thử cái này,

string s1="good"; string s=s1.Substring(0,1);


6
Sự khác biệt giữa câu trả lời này và câu trả lời được chọn là giải pháp này trả về một chuỗi và câu trả lời khác trả về một char.
Loïc Lopes

char chỉ nhận được một ký tự nhưng giải pháp của tôi có thể là kết quả nhiều hơn một ký tự nếu bạn muốn.
Sanjay Kumaar

1
Đó chỉ là một độ chính xác vì loại có thể có tầm quan trọng theo những gì bạn muốn làm với nó.
Loïc Lopes

18

Sự khác biệt giữa MyString[0]MyString.ToCharArray()[0]là trước đây coi chuỗi là một mảng chỉ đọc, trong khi ToCharArray()tạo ra một mảng mới. Cái trước sẽ nhanh hơn (cùng với dễ dàng hơn) cho hầu hết mọi thứ mà nó sẽ hoạt động, nhưng ToCharArraycó thể cần thiết nếu bạn có một phương thức cần chấp nhận một mảng hoặc nếu bạn muốn thay đổi mảng.

Nếu chuỗi không được biết là không rỗng và không trống, bạn có thể thực hiện:

string.IsNullOrEmpty(MyString) ? (char?)null : MyString[0]

trong đó trả về một char?trong hai null hoặc ký tự đầu tiên trong chuỗi, nếu phù hợp.


Cảm ơn vì đã đề cập char?như một cách để bao gồm khả năng "không có ký tự đầu tiên".
ToolmakerSteve

17

Bạn có thể sử dụng LINQ

char c = mystring.FirstOrDefault()

Nó sẽ bằng '\0'nếu chuỗi trống.


8

Hoặc bạn có thể làm điều này:

MyString[0];

6
@Robert, naw, tôi muốn nhìn thấy nó một lần nữa, chỉ để chắc chắn!
jjnguy

1
Tôi chỉ không nhìn thấy những cái trước mặt tôi :)
james_bond

1
đừng lo lắng. Tôi cũng làm điều đó Tôi là một ông trùm rất chậm.
jjnguy

8

Chỉ là một cách tiếp cận khác:

string mystr = "hello";
MessageBox.show(mystr.Substring(0, 1));

5

Tôi nghĩ rằng bạn đang tìm kiếm này MyString.ToCharArray()[0]

:)

Nhưng bạn cũng có thể sử dụng MyString[0].



0

Ví dụ sau để nhận ký tự đầu tiên từ một chuỗi có thể giúp ai đó

string anyNameForString = "" + stringVariableName[0];

0

Trả lời câu hỏi của bạn là KHÔNG.

Đúng là MyString [vị trí của nhân vật]. Đối với trường hợp của bạn MyString [0], 0 là ký tự ĐẦU TIÊN của bất kỳ chuỗi nào.

Giá trị ký tự được chỉ định bằng '(trích dẫn đơn), giống như giá trị x ký tự này được viết là' x '.

Một giá trị chuỗi được chỉ định bằng "(trích dẫn kép), như giá trị chuỗi x này được viết là" x ".

Vì vậy, phương thức Sub chuỗi () cũng không trả về một ký tự, phương thức Sub chuỗi () trả về một chuỗi !!!

Chuỗi là một mảng các ký tự và ký tự cuối cùng phải là ký tự '\ 0' (null). Đó là sự khác biệt giữa mảng ký tự và chuỗi (là một mảng các ký tự có ký tự cuối cùng là "điểm cuối của chuỗi đánh dấu" '\ 0' null.

Và cũng lưu ý rằng 'x' KHÔNG PHẢI LÀ "x". Bởi vì "x" thực sự là 'x' + '\ 0'.


0

Trong C # 8, bạn có thể sử dụng phạm vi.

myString[0..Math.Min(myString.Length, 1)]

Thêm một ?sau myStringđể xử lý nullchuỗi.


-2

nhận một char từ một chuỗi có thể phụ thuộc vào enconding (mặc định chuỗi là UTF-16)

https://stackoverflow.com/a/32141891

string str = new String(new char[] { '\uD800', '\uDC00', 'z' });
string first = str.Substring(0, char.IsHighSurrogate(str[0]) ? 2 : 1);

2
Làm thế nào đây là một câu trả lời?
Nilesh
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.