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 "*! "

เมื่อคุณคอมไพล์และรันโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

*! *! *! *! *! *! *! *! *! *!