C #: วิธีการรับถ่านครั้งแรก?


177

สามารถcharดึงสตริงแรกด้วยการทำต่อไปนี้หรือไม่?

MyString.ToCharArray[0]

4
คุณเรียนรู้อะไรเมื่อพยายาม
Michael Petrotta

1
@Michael: มีข้อผิดพลาดในการรวบรวม คุณตั้งใจจะใช้ ToCharArray อย่างไรถ้าไม่ใช่ด้วยวิธีนี้
Craig Johnston

3
สำหรับบันทึกที่ToCharArrayเป็นวิธีที่คุณควรใช้มันเป็นครั้งแรกเช่นและจากนั้นใช้char[] chars = str.ToCharArray(); นอกจากนี้คุณยังสามารถฆ่ามันเข้าไปchar first = chars[0]; str.ToCharArray()[0];ตรวจสอบให้แน่ใจว่าคุณตรวจสอบว่าสตริงนั้นไม่ว่างและมีอักขระอย่างน้อยหนึ่งตัว - คุณสามารถใช้มันif(!String.IsNullOrEmpty(str))ได้
Kobi

1
เครก .. การใช้ ToCharArray นั้นผิด ดูคำตอบของฉัน
Nayan

4
คุณต้องการตัวอักษรcharแรกหรือตัวแรก? หากคุณลองทำสิ่งนี้และดูเหมือนว่าจะใช้งานได้ลองอีกครั้งด้วย𣊾หรือ𣇞ซึ่งทั้งสองอย่างล้มเหลวในโปรแกรมที่ฉันใช้ซึ่งเขียนด้วยภาษา C # ด้วยจุดบกพร่องที่แน่นอนนี้
hippietrail

คำตอบ:



56

Mystring[0] ควรจะเพียงพอ


51
ไม่ควรใช้เวลาห้าวินาทีในการพิมพ์คำว่า "ควรจะเพียงพอ"
Robert Harvey

ใครตอบคำถามนี้ก่อน
Craig Johnston

เลือกแท็บที่เก่าแก่ที่สุดเพื่อดูว่าเป็น Matthew
johnc

10
@ johnc: หรือดีกว่าเลื่อนเมาส์ไปที่ timestamp
Jeff Mercado

21

ลองนี้

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


6
ความแตกต่างระหว่างคำตอบนี้กับคำตอบที่เลือกคือคำตอบนี้จะคืนค่าสตริงและอีกคำตอบจะส่งคืนอักขระ
Loïc Lopes

ถ่านได้ตัวละครเพียงตัวเดียว แต่ทางออกของฉันอาจส่งผลมากกว่าหนึ่งตัวถ้าคุณต้องการ
Sanjay Kumaar

1
มันเป็นเพียงความแม่นยำเนื่องจากประเภทสามารถมีความสำคัญตามสิ่งที่คุณต้องการจะทำกับมัน
Loïc Lopes

18

ความแตกต่างระหว่างMyString[0]และMyString.ToCharArray()[0]คือการที่อดีตถือว่าสตริงเป็นอาร์เรย์อ่านอย่างเดียวในขณะที่ToCharArray()สร้างอาร์เรย์ใหม่ อดีตจะเร็วกว่า (พร้อมด้วยง่ายกว่า) สำหรับเกือบทุกอย่างที่จะใช้งานได้ แต่ToCharArrayอาจจำเป็นถ้าคุณมีวิธีที่ต้องยอมรับอาร์เรย์หรือถ้าคุณต้องการเปลี่ยนอาร์เรย์

หากไม่ทราบว่าสตริงเป็นไม่เป็นโมฆะและไม่ว่างคุณสามารถทำได้:

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

ซึ่งคืนค่า a char?ของ null หรืออักขระตัวแรกในสตริงตามความเหมาะสม


ขอขอบคุณที่กล่าวถึงchar?วิธีการรวมความเป็นไปได้ "ไม่มีตัวอักษรแรก"
ToolmakerSteve

17

คุณสามารถใช้ LINQ

char c = mystring.FirstOrDefault()

มันจะเท่ากับ'\0'ถ้าสตริงว่างเปล่า


8

หรือคุณสามารถทำสิ่งนี้:

MyString[0];

6
@ Robert, naw, ฉันอยากจะดูอีกครั้งเพื่อให้แน่ใจ!
jjnguy

1
ฉันไม่เห็นสิ่งที่อยู่ก่อนหน้าฉัน :)
james_bond

1
ไม่ต้องห่วง. ฉันทำมันตลอดเวลาด้วย ฉันเป็นคนขี้โมโหช้าจริงๆ
jjnguy


5

ฉันคิดว่าคุณกำลังมองหาสิ่งนี้ MyString.ToCharArray()[0]

:)

แต่คุณก็สามารถใช้ได้MyString[0]เช่นกัน




0

คำตอบสำหรับคำถามของคุณคือไม่

ถูกต้องคือ MyString [ตำแหน่งของตัวละคร] สำหรับกรณีของคุณ MyString [0], 0 คือตัวอักษรตัวแรกของสตริงใด ๆ

ค่าอักขระถูกกำหนดด้วย '(เครื่องหมายคำพูดเดี่ยว) เช่นค่าอักขระ x นี้ถูกเขียนเป็น' x '

ค่าสตริงถูกกำหนดด้วย "(เครื่องหมายคำพูดคู่) เช่นค่าสตริง x นี้ถูกเขียนเป็น" x "

ดังนั้นวิธีการ Substring () ก็ไม่ได้ส่งกลับตัวอักษรวิธีการ Substring () จะส่งกลับสตริง !!!

สตริงคืออาร์เรย์ของอักขระและอักขระสุดท้ายต้องเป็นอักขระ '\ 0' (null) นั่นคือความแตกต่างระหว่างอาร์เรย์อักขระและสตริง (ซึ่งเป็นอาร์เรย์ของอักขระที่มีอักขระตัวสุดท้ายเป็น "จุดสิ้นสุดของตัวทำเครื่องหมายสตริง" '\ 0' null

และสังเกตว่า 'x' ไม่เท่ากับ "x" เนื่องจาก "x" เป็นจริง 'x' + '\ 0'


0

ใน C # 8 คุณสามารถใช้ช่วง

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

เพิ่ม?after myStringเพื่อจัดการกับnullสตริง


-2

รับถ่านจากสตริงอาจขึ้นอยู่กับการเข้ารหัส (สตริงเริ่มต้นคือ 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
นี่เป็นคำตอบอย่างไร
Nilesh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.