F # - ciągi
W F # typ ciągu reprezentuje niezmienny tekst jako sekwencję znaków Unicode.
Literały strunowe
Literały łańcuchowe są rozdzielane znakiem cudzysłowu (").
Niektóre znaki specjalne służą do specjalnych zastosowań, takich jak znak nowej linii, tabulator itp. Są one kodowane przy użyciu znaku ukośnika odwrotnego (\). Znak odwrotnego ukośnika i powiązany znak tworzą sekwencję ucieczki. W poniższej tabeli przedstawiono sekwencję ucieczki obsługiwaną przez F #.
Postać | Sekwencja ewakuacyjna |
---|---|
Backspace | \b |
Nowa linia | \ n |
Powrót karetki | \ r |
Patka | \ t |
Ukośnik wsteczny | \\ |
Cudzysłów | \ " |
Apostrof | \ ' |
Znak Unicode | \ uXXXX lub \ UXXXXXXXX (gdzie X oznacza cyfrę szesnastkową) |
Sposoby ignorowania sekwencji ucieczki
Poniższe dwa sposoby powodują, że kompilator ignoruje sekwencję ucieczki -
- Korzystanie z symbolu @.
- Ujęcie ciągu w potrójne cudzysłowy.
Gdy literał ciągu jest poprzedzony symbolem @, nazywany jest a verbatim string. W ten sposób wszystkie sekwencje specjalne w ciągu są ignorowane, z wyjątkiem tego, że dwa znaki cudzysłowu są interpretowane jako jeden znak cudzysłowu.
Gdy ciąg jest ujęty w potrójne cudzysłowy, ignorowane są również wszystkie sekwencje specjalne, w tym znaki podwójnego cudzysłowu.
Przykład
Poniższy przykład demonstruje tę technikę pokazującą, jak pracować z XML lub innymi strukturami, które zawierają osadzone cudzysłowy -
// Using a verbatim string
let xmldata = @"<book author = ""Lewis, C.S"" title = ""Narnia"">"
printfn "%s" xmldata
Kiedy kompilujesz i wykonujesz program, daje to następujące dane wyjściowe -
<book author = "Lewis, C.S" title = "Narnia">
Podstawowe operatory na łańcuchach
Poniższa tabela przedstawia podstawowe operacje na łańcuchach -
Wartość | Opis |
---|---|
collect: (char → string) → string → string | Tworzy nowy ciąg, którego znaki są wynikiem zastosowania określonej funkcji do każdego ze znaków ciągu wejściowego i konkatenacji powstałych ciągów. |
concat: string → seq <string> → string | Zwraca nowy ciąg utworzony przez konkatenację podanych ciągów za pomocą separatora. |
istnieje: (char → bool) → string → bool | Sprawdza, czy którykolwiek znak łańcucha spełnia podany predykat. |
forall: (char → bool) → string → bool | Sprawdza, czy wszystkie znaki w ciągu spełniają podany predykat. |
init: int → (int → string) → string | Tworzy nowy ciąg, którego znaki są wynikiem zastosowania określonej funkcji do każdego indeksu i konkatenacji powstałych ciągów. |
iter: (znak → jednostka) → ciąg → jednostka | Stosuje określoną funkcję do każdego znaku w ciągu. |
iteri: (int → char → unit) → string → unit | Stosuje określoną funkcję do indeksu każdego znaku w ciągu i samego znaku. |
długość: string → int | Zwraca długość ciągu. |
map: (char → char) → string → string | Tworzy nowy ciąg, którego znaki są wynikiem zastosowania określonej funkcji do każdego ze znaków ciągu wejściowego. |
mapi: (int → char → char) → string → string | Tworzy nowy ciąg, którego znaki są wynikiem zastosowania określonej funkcji do każdego znaku i indeksu ciągu wejściowego. |
replicate: int → string → string | Zwraca ciąg, łącząc określoną liczbę wystąpień ciągu. |
Poniższe przykłady pokazują zastosowania niektórych z powyższych funkcji -
Przykład 1
Funkcja String.collect tworzy nowy ciąg, którego znaki są wynikiem zastosowania określonej funkcji do każdego ze znaków ciągu wejściowego i konkatenacji otrzymanych ciągów.
let collectTesting inputS =
String.collect (fun c -> sprintf "%c " c) inputS
printfn "%s" (collectTesting "Happy New Year!")
Kiedy kompilujesz i wykonujesz program, daje to następujące dane wyjściowe -
H a p p y N e w Y e a r !
Przykład 2
Funkcja String.concat łączy daną sekwencję ciągów z separatorem i zwraca nowy ciąg.
let strings = [ "Tutorials Point"; "Coding Ground"; "Absolute Classes" ]
let ourProducts = String.concat "\n" strings
printfn "%s" ourProducts
Kiedy kompilujesz i wykonujesz program, daje to następujące dane wyjściowe -
Tutorials Point
Coding Ground
Absolute Classes
Przykład 3
Metoda String.replicate zwraca ciąg znaków poprzez konkatenację określonej liczby wystąpień ciągu.
printfn "%s" <| String.replicate 10 "*! "
Kiedy kompilujesz i wykonujesz program, daje to następujące dane wyjściowe -
*! *! *! *! *! *! *! *! *! *!