String Concatenation and Formatting

by Martin D. Maas, Ph.D

Julia has excellent support for strings. In this section we’ll just go about the basics of defining, concatenating strings, and converting numbers to strings.

As usual, if you are looking for a full reference and advanced topics, check out the official documentation, in this case the Strings reference.

Strings and Chars

One basic distinction is that Julia contains two relevant data types: string and char. Strings are initialized with " while chars use '.

"Hello"             # string
'H'                 # char
'Hello'             # error!! character literal contains multiple characters

Concatenate Strings

There are at least two ways to concatenate strings in Julia: you can use the * operator and the string function.

"Hello " * "wor" * "ld"
string("Hello", " ", "world")

both options will return the string "Hello world"

Convert Number to String

There are various ways of converting a number to a string:

  • using the string function.
  • using string interpolation.
  • using the classic C-style Printf package to format the output.

Let’s see what we obtain if we apply this to the number 1/7:

string(1/7)               # Returns "0.14285714285714285".
"$(1/7)"                  # Returns "0.14285714285714285".
`@sprintf("%6.4f",1/7)`   # Returns `"0.1429"`

Concatenate a number to a string

Now let’s check out a few examples of both string concatenation, and number-to-string conversion.

Using the string function

The simplest way is to use the string function

string("In ancient Babylon they approximated pi to 25/8, which is ", 25/8)
"In ancient Babylon they approximated pi to 25/8, which is 3.125"

Using string interpolation

We can obtain the same result using “string interpolation”.

"In ancient Babylon they approximated pi to 25/8, which is $(25/8)"

With string interpolation, the expression between parenthesis we’ll be evaluated (which in this case returns a Float), and then converted to a string.

As you can see, this notation is more compact than the string function, while it’s still easy to read. It can be convenient when you need to do many concatenations, like when doing something like:

rmse = 1.5; mse = 1.1; R2 = 0.94
"Our model has a R^2 of $(R2), rmse of $(rmse), and mse of $(mse)"
"Our model has a R^2 of 0.94, rmse of 1.5, and mse of 1.1"

Using the Printf package

In case you need to control the number of digits in the output, or use scientific notation, you can use the classic, C-style, Printf package, which contains the @sprintf macro that returns a string.

using Printf
str = @sprintf("Archimedes approximated pi to 22/7, which is %.4f...", 22/7)
"Archimedes approximated pi to 22/7, which is 3.1429..."

The package follows the C convention. Even though this can be hard to read and use, it is very powerful when we need precise control on the final format.

The cases which I tend to use most frequently are:

formatdescriptionexample
%.4f4 decimal digits100.1429
%.4eScientific notation with 4 digits1.4286e-05

You can check out more examples in the Julia documentation, or the full specification of the format in the C++ documentation