From ZDoom Wiki
Jump to: navigation, search
Note: This feature is for ZScript only.

String is a built-in type in ZScript. It's used for text data and has some additional features in it.

Special operations

You can use operator .. to concatenate text representations of any objects (ints, doubles...) into a single string.

 double x = 4;
 int y = 2;
 A_Log(x..", "..y); // outputs 4.00000, 2

Note that this way you can't control the count of digits after the decimal point, for example. For that, see Format.

Static methods

  • String Format(String fmt, ...) — allows to format a string using a subset of C Printf format.

This is a static method, which means that you call it off the class, like this:

 A_Log(String.Format("%p = %s (at %.2f, %.2f, %.2f)", self, GetClassName(), pos.x, pos.y, pos.z));

Note: uppercase formats generally mean uppercase versions of outputs.

Format Description
 %% Escaped % character.
 %s A string. Can be padded, for example, %-20s will mean that the string will be minimum 20 characters long.
 %p A pointer. This takes an object, for example, an actor pointer like self.
 %c An unsigned integer as character. Refer to the ASCII table for character indices.
 %d, %i A signed integer as decimal. Signed integers can be negative. Can be padded with zeroes with formats like %04d (this particular one means minimum of 4 characters).
 %u An unsigned integer as decimal. Unsigned integers can't be negative.
 %x, %X An unsigned integer as hexadecimal. %08X outputs uppercase 8-digit value padded with zeroes.
 %o An unsigned integer as octal.
 %f, %F A simple double format, for example, 1.82. Exact precision can be specified using %.2f (for guaranteed two digits after the decimal point).
 %e, %E An exponent-based double format, for example, 2.00E-01 for 0.2. Exact precision for the main part can be specified the same way as for %f.
 %g, %G Either %f/%F or %e/%E, depending on the situation and size of the number.
 %a, %A A hexadecimal double format. This is not recommended to use, as it's OS-dependent.


  • void AppendFormat(String fmt, ...) — the same as regular Format, but it needs an existing string and appends the formatted value to it.
 String s;
 s.AppendFormat("%s %.2f", "meow", 0.24);
  • void Replace(String pattern, String replacement) — replaces all occurrences of specified pattern with replacement in an existing string.
 String s = "ZScript sucks";
 s.Replace("sucks", "is awesome");
 A_Log(s); // should output "ZScript is awesome"
  • String Mid(int pos = 0, int len = 2147483647) — returns a substring starting at pos and len characters long (or, if len is too large, until the end of the string).
 String s = "tmeowd";
 String meow = s.Mid(1, 4); // should result in a string "meow"
  • String Left(int len) - Like Mid, but always starts at the very beginning of the string.
 String s = "barkblargh";
 String bark = s.Left(4); // should result in a string "bark"
  • String CharAt(int pos) — returns single character at the specified position as string.
 String s = "abcd";
 String chrat = s.CharAt(1); // should be "b"
  • int CharCodeAt(int pos) — returns single character at the specified position as integer (ASCII code). This can be used with %c format.
  • int Length() - returns how many characters are in the string.
String s = "abcd";
int size = s.Length(); // Returns 4.

The following two functions are (New from 3.2.5)

  • int IndexOf(String substr, int startIndex = 0) - Attempts to find and return the starting position of substr, if the string matches. This searches from left to right. This function is case sensitive.
  • int LastIndexOf(String substr) - Like IndexOf, but with a reversed search pattern going from right to left. This function is case sensitive.
// Returns 5, since every character from left to right is a position.
// I.e. the I is at position 0, W at 1, a at 2, n at 3, t at 4, T at 5.

String tacoline = "IWantTacos";
int location = tacoline.IndexOf("Tacos");

The following two functions are (New from 3.2.5)

  • void ToLower() - returns the string as all lower-case letters.
  • void ToUpper() - returns the string as all upper-case letters.
// Prints out a text string as upper case letters. If the font has upper and lower case,
// the difference will be visible. The default console font has both.

String t = "test";
Console.Printf("%s", t.ToUpper());

See Also