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 -

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