F # - สตริง
ใน F # ประเภทสตริงจะแสดงข้อความที่ไม่เปลี่ยนรูปเป็นลำดับของอักขระ Unicode
ตัวอักษรสตริง
ตัวอักษรสตริงถูกคั่นด้วยเครื่องหมายอัญประกาศ (") อักขระ
อักขระพิเศษบางตัวมีไว้สำหรับการใช้งานพิเศษเช่นขึ้นบรรทัดใหม่แท็บ ฯลฯ ซึ่งเข้ารหัสโดยใช้อักขระแบ็กสแลช (\) อักขระแบ็กสแลชและอักขระที่เกี่ยวข้องทำให้ลำดับการหลบหนี ตารางต่อไปนี้แสดงลำดับการหลีกเลี่ยงที่รองรับโดย F #
ตัวละคร | ลำดับการหลบหนี |
---|---|
Backspace | \ b |
ขึ้นบรรทัดใหม่ | \ n |
การกลับรถ | \ r |
แท็บ | \ t |
แบ็กสแลช | \\ |
เครื่องหมายคำพูด | \ " |
เครื่องหมายอะพอสทรอฟี | \ ' |
อักขระ Unicode | \ uXXXX หรือ \ UXXXXXXXX (โดยที่ X หมายถึงเลขฐานสิบหก) |
วิธีการพิจารณาลำดับการหลบหนี
สองวิธีต่อไปนี้ทำให้คอมไพลเลอร์ไม่สนใจลำดับการหลีกเลี่ยง -
- ใช้สัญลักษณ์ @
- การใส่สตริงด้วยเครื่องหมายคำพูดสามคำ
เมื่อสตริงลิเทอรัลนำหน้าด้วยสัญลักษณ์ @ จะเรียกว่า a verbatim string. ด้วยวิธีนี้ลำดับ Escape ทั้งหมดในสตริงจะถูกละเว้นยกเว้นว่าอักขระเครื่องหมายคำพูดสองตัวจะถูกตีความเป็นอักขระเครื่องหมายคำพูดหนึ่งตัว
เมื่อสตริงถูกล้อมรอบด้วยเครื่องหมายคำพูดสามคำลำดับการหลีกทั้งหมดจะถูกละเว้นรวมถึงอักขระเครื่องหมายอัญประกาศคู่
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงเทคนิคนี้ที่แสดงวิธีการทำงานกับ XML หรือโครงสร้างอื่น ๆ ที่มีเครื่องหมายคำพูดฝังอยู่ -
// Using a verbatim string
let xmldata = @"<book author = ""Lewis, C.S"" title = ""Narnia"">"
printfn "%s" xmldata
เมื่อคุณคอมไพล์และรันโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -
<book author = "Lewis, C.S" title = "Narnia">
ตัวดำเนินการพื้นฐานบนสตริง
ตารางต่อไปนี้แสดงการดำเนินการพื้นฐานกับสตริง -
มูลค่า | คำอธิบาย |
---|---|
รวบรวม: (ถ่าน→สตริง) →สตริง→สตริง | สร้างสตริงใหม่ที่มีอักขระซึ่งเป็นผลลัพธ์ของการใช้ฟังก์ชันที่ระบุกับแต่ละอักขระของสตริงอินพุตและเชื่อมสตริงผลลัพธ์เข้าด้วยกัน |
concat: string → seq <string> → string | ส่งคืนสตริงใหม่ที่สร้างขึ้นโดยการเชื่อมต่อสตริงที่กำหนดด้วยตัวคั่น |
มีอยู่: (ถ่าน→บูล) →สตริง→บูล | ทดสอบว่าอักขระใด ๆ ของสตริงตรงตามเพรดิเคตที่กำหนดหรือไม่ |
forall: (ถ่าน→บูล) →สตริง→บูล | ทดสอบว่าอักขระทั้งหมดในสตริงตรงตามเพรดิเคตที่กำหนดหรือไม่ |
init: int → (int →สตริง) →สตริง | สร้างสตริงใหม่ที่มีอักขระซึ่งเป็นผลลัพธ์ของการใช้ฟังก์ชันที่ระบุกับแต่ละดัชนีและเชื่อมสตริงผลลัพธ์เข้าด้วยกัน |
iter: (ถ่าน→หน่วย) →สตริง→หน่วย | ใช้ฟังก์ชันที่ระบุกับอักขระแต่ละตัวในสตริง |
iteri: (int →ถ่าน→หน่วย) →สตริง→หน่วย | ใช้ฟังก์ชันที่ระบุกับดัชนีของแต่ละอักขระในสตริงและอักขระนั้นเอง |
ความยาว: สตริง→ int | ส่งกลับความยาวของสตริง |
แผนที่: (ถ่าน→ถ่าน) →สตริง→สตริง | สร้างสตริงใหม่ที่มีอักขระเป็นผลลัพธ์ของการใช้ฟังก์ชันที่ระบุกับอักขระแต่ละตัวของสตริงอินพุต |
mapi: (int →ถ่าน→ถ่าน) →สตริง→สตริง | สร้างสตริงใหม่ที่มีอักขระซึ่งเป็นผลลัพธ์ของการใช้ฟังก์ชันที่ระบุกับแต่ละอักขระและดัชนีของสตริงอินพุต |
ทำซ้ำ: int → string → string | ส่งคืนสตริงโดยการเชื่อมต่อจำนวนอินสแตนซ์ที่ระบุของสตริง |
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้ฟังก์ชันข้างต้น -
ตัวอย่าง 1
ฟังก์ชัน String.collect สร้างสตริงใหม่ที่มีอักขระซึ่งเป็นผลลัพธ์ของการใช้ฟังก์ชันที่ระบุกับอักขระแต่ละตัวของสตริงอินพุตและเชื่อมสตริงผลลัพธ์เข้าด้วยกัน
let collectTesting inputS =
String.collect (fun c -> sprintf "%c " c) inputS
printfn "%s" (collectTesting "Happy New Year!")
เมื่อคุณคอมไพล์และรันโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -
H a p p y N e w Y e a r !
ตัวอย่าง 2
ฟังก์ชัน String.concat เชื่อมต่อลำดับของสตริงที่กำหนดด้วยตัวคั่นและส่งคืนสตริงใหม่
let strings = [ "Tutorials Point"; "Coding Ground"; "Absolute Classes" ]
let ourProducts = String.concat "\n" strings
printfn "%s" ourProducts
เมื่อคุณคอมไพล์และรันโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -
Tutorials Point
Coding Ground
Absolute Classes
ตัวอย่างที่ 3
วิธี String.replicate ส่งคืนสตริงโดยการเชื่อมต่อจำนวนอินสแตนซ์ที่ระบุของสตริง
printfn "%s" <| String.replicate 10 "*! "
เมื่อคุณคอมไพล์และรันโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -
*! *! *! *! *! *! *! *! *! *!