ฉันต้องการทำสิ่งต่อไปนี้ใน C # (มาจากพื้นหลัง Python):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
ฉันจะแทนที่โทเค็นภายในสตริงด้วยค่าภายนอกได้อย่างไร
ฉันต้องการทำสิ่งต่อไปนี้ใน C # (มาจากพื้นหลัง Python):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
ฉันจะแทนที่โทเค็นภายในสตริงด้วยค่าภายนอกได้อย่างไร
คำตอบ:
string mystr = string.Format("This is {0}overflow", strVar);
และคุณยังสามารถใช้พารามิเตอร์ที่ตั้งชื่อแทนดัชนีได้อีกด้วย
สิ่งนี้ถูกเพิ่มเมื่อ C # 6.0 (Visual Studio 2015+)
ตัวอย่าง:
var planetName = "Bob";
var myName = "Ford";
var formattedStr = $"Hello planet {planetName}, my name is {myName}!";
// formattedStr should be "Hello planet Bob, my name is Ford!"
นี่คือน้ำตาลวากยสัมพันธ์สำหรับ:
var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName);
แหล่งข้อมูลเพิ่มเติม:
$("This feature is {GetDescription(FEATURE_AMAZING))}");
คุณสามารถใช้string.Format
เพื่อวางค่าลงในสตริง:
private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");
อีกทางเลือกหนึ่งคือการใช้ตัวดำเนินการเชื่อมต่อ C #:
var strVar = "stack";
var myStr = "This is " + strVar + "overflow";
หากคุณกำลังทำการเรียงต่อกันจำนวนมากให้ใช้StringBuilder
คลาสที่มีประสิทธิภาพมากกว่า:
var strVar = "stack";
var stringBuilder = new StringBuilder("This is ");
for (;;)
{
stringBuilder.Append(strVar); // spot the deliberate mistake ;-)
}
stringBuilder.Append("overflow");
var myStr = stringBuilder.ToString();
ค # 6.0
string mystr = $"This is {strVar}overflow";
หากคุณใช้ Visual Studio 2015 กับ C # 6.0 อยู่ให้ลองทำดังต่อไปนี้:
var strVar = "stack";
string str = $"This is {strVar} OverFlow";
คุณลักษณะนั้นเรียกว่าการแก้ไขสตริง
ไม่มีตัวดำเนินการสำหรับสิ่งนั้น string.Format
คุณจำเป็นต้องใช้
string strVar = "stack";
string mystr = string.Format("This is {0}soverflow", strVar);
น่าเสียดายที่string.Format
เป็นวิธีการคงที่ดังนั้นคุณจึงไม่สามารถเขียน"This is {0}soverflow".Format(strVar)
ได้ บางคนได้กำหนดวิธีการขยายซึ่งอนุญาตให้ใช้ไวยากรณ์นี้
ใช้string.Format
:
string mystr = string.Format("This is {0}overflow", "stack");
คุณควรใช้String.Format()
. ไวยากรณ์แตกต่างกันเล็กน้อยโดยใช้ตัวยึดตำแหน่งตัวเลขแทน
ตัวอย่าง:
String.Format("item {0}, item {1}", "one", "two")
ดูรายละเอียดเพิ่มเติมได้ที่http://msdn.microsoft.com/en-us/library/system.string.format.aspx
คุณมี 2 ตัวเลือก คุณสามารถใช้ String.Format หรือใช้ตัวดำเนินการเรียงต่อกันก็ได้
String newString = String.Format("I inserted this string {0} into this one", oldstring);
หรือ
String newString = "I inserted this string " + oldstring + " into this one";
String.Format()
ใช้ StringBuilder โดยทั่วไปแล้ว StringBuilder จะมีประสิทธิภาพมากกว่าเมื่อเชื่อมสตริงจำนวนมากเข้าด้วยกัน แต่ตัวดำเนินการเรียงต่อกันนั้นสมบูรณ์แบบสำหรับการปิดหนึ่งครั้ง String.Format()
มีประโยชน์เมื่อต้องใช้การจัดรูปแบบกับเอาต์พุตเช่นเพิ่มช่องว่างภายในหรือเลขศูนย์นำหน้าให้เป็นค่าตัวเลข ดังนั้นการใช้String.Format()
ในลูปอาจทำให้เกิดการอินสแตนซ์ของ StringBuilders ได้มาก ในสถานการณ์นั้นควรใช้ StringBuilder ตัวเดียวที่ประกาศนอกลูปและAppendFormat()
ภายในลูป
มีอีกวิธีหนึ่งในการใช้ตัวยึดตำแหน่งด้วยสตริงแทนที่ช่วยได้อย่างแปลกประหลาดในบางสถานการณ์:
mystr = mystr.Replace("%soverflow", strVar);
คุณสามารถใช้วิธีต่อไปนี้
การแก้ไขสตริง
อักขระพิเศษ $ ระบุสตริงลิเทอรัลเป็นสตริงที่ถูกแก้ไข เช่น
string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza
สตริงที่ถูกแก้ไขเป็นสตริงลิเทอรัลที่อาจมีนิพจน์ที่ถูกแก้ไข เมื่อสตริงที่แก้ไขถูกแก้ไขเป็นสตริงผลลัพธ์รายการที่มีนิพจน์ที่ถูกแก้ไขจะถูกแทนที่ด้วยการแสดงสตริงของผลลัพธ์นิพจน์
สตริงรูปแบบ
ใช้ String.Format หากคุณต้องการแทรกค่าของวัตถุตัวแปรหรือนิพจน์ลงในสตริงอื่นเช่น
WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));
ใช้:
strVar = "stack"
mystr = String.Format("This is {0}", strVar);
คุณสามารถทำได้ด้วย Expansive: https://github.com/anderly/Expansive