(strings)=
# Strings

```cs
// Simple concatenation
var firstName = "Ada";
var lastName = "Lovelace";
var fullName = firstName + " " + lastName; // "Ada Lovelace"

// Using a string like an array
char firstChar = firstName[0]; // 'A'
char secondLastChar = lastName[^2]; // 'c'

// String interpolation 
var year = 1843;
var bio = $"Born in {year}, {fullName} is considered the first computer programmer.";
// "Born in 1843, Ada Lovelace is considered the first computer programmer."

// Using String.Format (older style, but useful for templates)
var persInfoTemplate = "{0}, {1} – {2}";
// a template can be used many times and for separating data and program logic
var formatted = string.Format(persInfoTemplate, lastName, firstName, year);
// "Lovelace, Ada – 1843"

// Multiline string with interpolation (Raw string literals)
var table = """
            +---+---+---+---+
            | x |   | x |   |
            | y |   |   |   |
            +---+---+---+---+
            """;

// A string has much more methods. Explore them by using code completion:
// Type `.` after the string to see all the available methods.
bool lastCharIsDot = fullName.EndsWith('.');
```

<!--
// Joining a collection
List<string> fruits = ["apple", "banana", "cherry"];
var csv = string.Join(" | ", fruits); // "apple | banana | cherry"
-->

:::{activity} Personal data check mail template 
:label: personal-data-check-mail-template
You want to send a yearly personal data check to all employees. The draft handed to you by your employee looks like this:

```text
Dear _FORENAMES_ _SURNAME_, we yearly make sure that your contact data is valid. Please check if your address and telephone data are up to date:

_ADDRESS_

_TELEPHONE_

If not valid, contact us on _EMAIL_.
```

The placeholders begin and end with an underscore `_`. The Email address must be `support-dk@fed.company` for Danish phone numbers and `support@fed.company` for others.

Create a template string for the email above. Use the following template which prints all the data from an example dataset.

```cs
Employee[] employees =
[
    new ("Lars", "Nielsen", "Østerbrogade 123, 4. th\n2100 København Ø", "+45 2012 3456"),
    new ("Maria Isabel", "García", "Calle Mayor 45, 2ºB\n28013 Madrid", "+34 612 345 678"),
    new ("Fulya", "Tayşi", "Ataköy 9. kısım, A-25B D.35, Bakırköy\n34156 İstanbul", "+90 212 559 67 40")
];

foreach (var e in employees) {
    // YOUR CODE HERE
    Console.WriteLine(e.Forenames + e.Surname + e.Address + e.Telephone);
}

internal record Employee(
    string Forenames,
    string Surname,
    string Address,
    string Telephone);
```
:::

<!--
## `Console.Write()` function

Similar to `WriteLine`, but without a newline
-->

## Appendix

- [String Class](https://learn.microsoft.com/en-us/dotnet/api/system.string)