Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Which is better to use, string.format or concatenation?

In this case, I'm assuming that both can be used easily.

There are some cases, such as the following, where string.format can come in handy, because of it's ability to use to to make sure that the script puts in a 0 in the tens digit if the seconds are only at 8 or something. Are there any other cases or things string.format is really good for? Which is faster?

local function secondsToStamp(timeInSeconds) -- Converts 65 seconds to 01:05, see Lua string Library for more information
	return string.format("%d:d", math.floor(timeInSeconds / 60), timeInSeconds % 60)
end

This function is the same, but a little bit messier:

local function secondsToStamp(timeInSeconds) -- Converts 65 seconds to 01:05, see Lua string Library for more information
	return math.floor(timeInSeconds / 60) .. ":" .. (timeInSeconds % 60 >= 10 and "" or "0") .. (timeInSeconds % 60) 
end

And even worse:

-- This one asks for a 2 digits at the beginning, which I decided I do not want for my newer script, but did not edit this because reasons
function secondsToStamp(seconds) -- Converts 65 seconds to 01:05
	local mins = tostring(math.floor(seconds / 60)) -- seconds / 60 rounded down
	local secs = tostring(math.floor(seconds % 60)) -- Remainder of seconds / 60
	return (#mins < 2 and string.rep("0", 2 - #mins) or "") .. mins .. ":" .. (#secs < 2 and string.rep("0", 2 - #secs) or "") .. secs -- Return our string, while filling in the blanks so its 01:05 instead of 1:5
end

What are the other advantages of using string.format? Is there much of a difference?

2 answers

✓ Accepted answer

String.gsub is also a useful function worth considering, it can replace any found parts of a string with a new part just like string.format does. E.g. if you wanted to create a time formatter, you could do something like this

local Format = "HH:MM"
local hour = 14
local minute = 18
Format = string.gsub(Format,"HH",hour):gsub("MM",minute) --> 14:18

Otherwise string.format would be a much more advanced way of doing the task compared to concatenation, so utilising it would be much more efficient and professional :)

3 comments

0

Thanks, but I still think string.format is a better alternative in this case.

0

I like this, haven't thought of it before. It's nice because it gives names to each of the fields

0

Yes, but if minutes was under 10, then you would need to add on an additional 0.

The fastest version of this function would look like this:

local format = string.format

local function SecondsToStamp(Seconds)
	-- Converts 65 seconds to 01:05
    return format("%d:%.2d", Seconds / 60, Seconds % 60)
end

This discussion is preserved as it was. New answers, comments, and votes are closed.