ฉันได้อ่านคำถามนี้เพื่อรับอักขระแรกของสตริง มีวิธีรับ n จำนวนอักขระแรกจากสตริงใน C # หรือไม่?
ฉันได้อ่านคำถามนี้เพื่อรับอักขระแรกของสตริง มีวิธีรับ n จำนวนอักขระแรกจากสตริงใน C # หรือไม่?
คำตอบ:
คุณสามารถใช้Enumerableชอบ:
char[] array = yourStringVariable.Take(5).ToArray();
หรือคุณสามารถใช้String.Substring
string str = yourStringVariable.Substring(0,5);
โปรดจำไว้ว่าString.Substring
อาจทำให้เกิดข้อยกเว้นในกรณีที่ความยาวของสตริงน้อยกว่าอักขระที่ต้องการ
หากคุณต้องการรับผลลัพธ์กลับเป็นสตริงคุณสามารถใช้:
ใช้ String Constructor และ LINQ's Take
string firstFivChar = new string(yourStringVariable.Take(5).ToArray());
การบวกด้วยวิธีการไม่ได้ตรวจสอบความยาวก่อนมือ
String.Substring
กับการตรวจสอบข้อผิดพลาดชอบ:
string firstFivCharWithSubString =
!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
? yourStringVariable.Substring(0, 5)
: yourStringVariable;
IsNullOrWhiteSpace
ผิดที่นี่ พิจารณาสตริงที่มีช่องว่าง 10 ช่อง - รหัสของคุณจะส่งคืนทั้งหมด 10 ใช้IsNullOrEmpty
แทน (ไม่เป็นการดีที่จะรวมIsNullOrWhiteSpace
กับการทดสอบอื่น ๆ แต่ให้ทดสอบ null + ว่างแทนTrim
หากเป็นพฤติกรรมที่ระบุให้ทำการทดสอบ / การดำเนินการใด ๆ ที่จำเป็น)
yourString
น้อยกว่า 5 เพื่อหลีกเลี่ยงข้อยกเว้นเราสามารถสตริงย่อยตามเงื่อนไขเช่นyourString.Length <= 5 ? yourString : yourString.Substring(0, 5)
คุณสามารถใช้Substring (int startIndex, int length)
string result = str.Substring(0,5);
สตริงย่อยเริ่มต้นที่ตำแหน่งอักขระที่ระบุและมีความยาวที่ระบุ วิธีนี้ไม่ได้แก้ไขค่าของอินสแตนซ์ปัจจุบัน แต่จะส่งคืนสตริงใหม่ที่มีอักขระความยาวโดยเริ่มจากตำแหน่ง startIndex ในสตริงปัจจุบัน MSDN
จะเกิดอะไรขึ้นถ้าสตริงต้นทางน้อยกว่าห้าอักขระ คุณจะได้รับข้อยกเว้นโดยใช้วิธีการข้างต้น เราสามารถวางเงื่อนไขเพื่อตรวจสอบว่าจำนวนอักขระในสตริงมากกว่า 5 หรือไม่แล้วรับห้าตัวแรกผ่าน Substring หมายเหตุฉันได้กำหนดสตริงต้นทางให้กับตัวแปร firstFiveChar FirstFiveChar จะไม่เปลี่ยนแปลงหากอักขระน้อยกว่า 5 ดังนั้นจึงไม่จำเป็นต้องใช้ส่วนอื่น
string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
firstFiveChar = yourStringVariable.Substring(0, 5);
ไม่มีใครพูดถึงวิธีการตรวจสอบที่เหมาะสมเมื่อใช้Substring()
งานดังนั้นฉันจึงต้องการมีส่วนร่วมในเรื่องนี้
หากคุณไม่ต้องการใช้Linq
และไปด้วยSubstring()
คุณต้องแน่ใจว่าสตริงของคุณใหญ่กว่าพารามิเตอร์ตัวที่สอง (ความยาว) ของSubstring()
ฟังก์ชัน
สมมติว่าคุณต้องมีอักขระ 5 ตัวแรก คุณควรได้รับการตรวจสอบที่เหมาะสมดังนี้:
string title = "love" // 15 characters
var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5);
// firstFiveChars: "love" (4 characters)
หากไม่มีการตรวจสอบนี้Substring()
ฟังก์ชันจะทำให้เกิดข้อยกเว้นเนื่องจากมันจะวนซ้ำตัวอักษรที่ไม่มีอยู่
ฉันคิดว่าคุณคงเข้าใจ ...
ปัญหา.Substring(,)
คือคุณต้องแน่ใจว่าสตริงที่กำหนดมีความยาวอย่างน้อยของจำนวนอักขระที่ถามมิฉะนั้นArgumentOutOfRangeException
จะถูกโยนทิ้ง
โซลูชันที่ 1 (โดยใช้ 'Substring'):
var firstFive = stringValue != null ?
stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) :
null;
ข้อเสียของการใช้.Substring(
คือคุณจะต้องตรวจสอบความยาวของสตริงที่กำหนด
โซลูชันที่ 2 (โดยใช้ 'Take'):
var firstFive = stringValue != null ?
string.Join("", stringValue.Take(5)) :
null;
การใช้'Take'จะป้องกันไม่ให้คุณต้องตรวจสอบความยาวของสตริงที่กำหนด
ใช้ฟังก์ชัน PadRight เพื่อป้องกันไม่ให้สตริงสั้นเกินไปคว้าสิ่งที่คุณต้องการจากนั้นตัดช่องว่างจากส่วนท้ายทั้งหมดในคำสั่งเดียว
strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();
ฉันไม่รู้ว่าทำไมใคร ๆ ถึงพูดถึงเรื่องนี้ แต่เป็นวิธีที่สั้นและง่ายที่สุดในการบรรลุเป้าหมายนี้
string str = yourString.Remove(n);
n
- จำนวนอักขระที่คุณต้องการ
ตัวอย่าง
var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141
ต่อท้ายอักขระช่องว่างห้าตัวจากนั้นตัดห้าตัวแรกและตัดแต่งผลลัพธ์ จำนวนช่องว่างที่คุณต่อท้ายควรตรงกับจำนวนที่คุณกำลังตัด อย่าลืมใส่วงเล็บไว้ก่อน.Substring(0,X)
ไม่เช่นนั้นคุณจะไม่ต้องต่อท้าย
string str = (yourStringVariable + " ").Substring(0,5).Trim();
ด้วยเทคนิคนี้คุณจะไม่ต้องกังวลกับArgumentOutOfRangeException
คำตอบอื่น ๆ ที่กล่าวถึง
โปรดทราบว่ามีวิธีใหม่ในการดำเนินการนี้ใน C # 8.0: ตัวดำเนินการช่วง
หรือที่ฉันชอบเรียกว่า em, Pandas slices
วิธีเก่า:
string newString = oldstring.Substring(0, 5);
วิธีการใหม่:
string newString = oldstring[..5];
ซึ่งเมื่อมองแวบแรกดูเหมือนจะเป็นการแลกเปลี่ยนความสามารถในการอ่านโค้ดที่สั้นกว่า แต่คุณลักษณะใหม่นี้ให้คุณ
ของเด็ด ๆ แบบนี้:
var slice1 = รายการ [2 .. ^ 3]; // รายการ [Range.Create (2, Index.CreateFromEnd (3))]
var slice2 = รายการ [.. ^ 3]; // รายการ [Range ToEnd (Index.CreateFromEnd (3))]
var slice3 = รายการ [2 .. ]; // รายการ [Range.FromStart (2)]
var slice4 = รายการ [.. ]; // รายการ [ช่วงทั้งหมด]
string str = "GoodMorning"
string strModified = str.Substring(0,5);
เพื่อรับ n จำนวนอักขระแรกจากสตริงใน C #
String yourstring="Some Text";
String first_n_Number_of_Characters=yourstring.Substring(0,n);
ด้านล่างนี้เป็นวิธีการขยายที่ตรวจสอบว่าสตริงใหญ่กว่าที่ต้องการหรือไม่และย่อสตริงให้เป็นจำนวนอักขระสูงสุดที่กำหนดและต่อท้าย "... "
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;
}
}
ในC # 8.0คุณจะได้รับอักขระห้าตัวแรกของสตริงดังนี้
string str = data[0..5];
นี่คือข้อมูลเพิ่มเติมเกี่ยวกับดัชนีและช่วง
ฉันใช้:
var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);
หรือทางเลือกอื่นหากคุณต้องการตรวจสอบ Whitespace ด้วย (แทนที่จะเป็น Null เท่านั้น):
var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue
หรือคุณอาจจะใช้String.ToCharArray ()
ใช้เวลาint startindex
และและint length
เป็นพารามิเตอร์และส่งคืน achar[]
new string(stringValue.ToCharArray(0,5))
คุณยังคงต้องตรวจสอบให้แน่ใจว่าสตริงมีความยาวที่เหมาะสมมิฉะนั้นจะทำให้เกิดความเสียหาย ArgumentOutOfRangeException
โปรดลองใช้รหัสนี้เมื่อ str น้อยกว่า 5
string strModified = str.Substring(0,str.Length>5?5:str.Length);
นี่คือวิธีที่คุณทำได้ในปี 2020:
var s = "ABCDEFGH";
var first5 = s.AsSpan(0, 5);
Span <T>จุดโดยตรงกับหน่วยความจำของสตริงหลีกเลี่ยงการจัดสรรสตริงชั่วคราว แน่นอนว่าวิธีการใด ๆ ที่ตามมาเพื่อขอstring
การแปลงจำเป็น
Console.WriteLine(first5.ToString());
แม้ว่าวันนี้หลาย ๆ .NET
APIอนุญาตให้มีช่วงได้ ติดไว้ถ้าทำได้!
หมายเหตุ:หากการกำหนดเป้าหมาย.NET Framework
เพิ่มการอ้างอิงไปยังแพ็กเกจSystem.Memoryแต่อย่าคาดหวังประสิทธิภาพที่ยอดเยี่ยมเช่นเดียวกัน
AsSpan
.NET 5
.NET Core
อย่างไรก็ตามมันใช้งานได้.NET Framework 4.5+
หากคุณเพิ่มการอ้างอิงบางอย่าง
หากเราต้องการเพียง 5 อักขระแรกจากฟิลด์ใดก็ได้สิ่งนี้สามารถทำได้โดย Left Attribute
Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""
ลองใช้โค้ดด้านล่าง
string Name = "Abhishek";
string firstfour = Name.Substring(0, 4);
Response.Write(firstfour);
ฉันได้ลองคำตอบข้างต้นแล้วและสิ่งที่ดีที่สุดที่ฉันคิดว่าเป็นคำตอบนี้
@item.First_Name.Substring(0,1)
ในนี้ฉันจะได้อักษรตัวแรกของสตริง
char
** s และคุณกำลังถามเกี่ยวกับ ** character s พวกเขาไม่ใช่สิ่งเดียวกัน𣊾
และ𣇞
เป็นอักขระสองตัวที่ฉันต้องใช้เมื่อวานนี้ซึ่งล้มเหลวในซอฟต์แวร์ที่เขียนด้วย C # ที่ฉันใช้เพราะโปรแกรมเมอร์ไม่รู้ความแตกต่างระหว่างchar
อักขระ a และอักขระ อย่าตกหลุมพรางนี้!