Sringf
Dead simple cross-language string formatter
No dependencies, O(N*m)
Usage
go
import ( "fmt" "github.com/thanhpk/stringf") func main() { str := stringf.Format("hi {name}, here is your number {{2108}.", map[string]string{ "name": "Kieu Thanh", // key should not contains spaces }) fmt.Println(str)} // hi Kieu Thanh, here is your number {2108.
js
var stringf = var str = stringfconsole // hi Kieu Thanh, here is your number {2108.
Test
Go
go test
Js
npm test
Testcase
String | Parameter map | Output |
---|---|---|
hi {name} | name: Thanh |
hi Thanh |
hi {num} | num: 2108 |
hi 2108 |
{{abc} | abc: bcd |
{abc |
Pseudocode to implement in your own language
input:
a string, s
a map string to string, paramMap
output:
a string with param replaced
let ESCCHAR ← '{', ESCCHAREND ← '}', i ← 0, output ← ""
while i < length(s) do
if s[i] = ESCCHAR then
let j ← i + 1
while j <= length(s) and s[j] = ESCCHAR do
j ← j + 1
if (j - i) mod 2 = 0 then
output ← output + ESCCHAR
if (j - i) mod 2 ≠ 0 then
let param ← "" (parse parameter key)
while j < length(s) and s[j] ≠ ESCCHAREND do
param ← param + s[j]
j ← j + 1
if length(param) > 0 then
output ← output + paramMap[param]
if j = length(s) then
return output
else if s[j = ESCCHAREND then
j ← j + 1
i ← j
output ← output + s[i]
i ← i + 1
return output