字符串替换/ Haxe中的字符串格式化

时间:2018-03-05 06:58:32

标签: haxe

最常见的功能是字符串替换/字符串格式化。例如,以下命令之一:

"Hi my name is %s and I'm %s years old" % ("Derp", 12)

"Hi my name is {0} and I'm {1} years old".format("Derp", 12)

将被评估为

Hi my name is Derp and I'm 12 years old
在python中

。是否有(预定义的)方法在Haxe中做类似的事情?

2 个答案:

答案 0 :(得分:2)

烨。

在Haxe中称为String Interpolation

答案 1 :(得分:2)

相当于:

var name = "Mark";
var age = 31;
var message = 'Hi my name is $name and Im $age years old';
trace(message);

字符串插值是一个编译时功能,它基本上将其转换为:
"Hi my name is " + name + " and I'm " + age + " years old"

如果您使用动态文本(例如翻译和内容)并想要您建议的格式,那么您可以使用这样的正则表达式:

using Main.StringUtil;

class Main {
    public static function main() {
        var message = "hi my name is {0} and I'm {1} years old".format(["mark", 31]);
        trace(message);
    }
}

class StringUtil {
    public static function format(value:String, values:Array<Any>) {
        var ereg:EReg = ~/(\{(\d{1,2})\})/g;
        while (ereg.match(value)) {
            value = ereg.matchedLeft() + values[Std.parseInt(ereg.matched(2))] + ereg.matchedRight();
        }
        return value;
    }
}

在线尝试:https://try.haxe.org/#381c8

  

该类顶部的using允许将字符串用作mixin "".format()(在Haxe中称为static extension)。

更新:没有正则表达式,您可以这样做:

using StringTools;
using Main.StringUtil;

class Main {
    public static function main() {
        var message = "hi my name is {0} and I'm {1} years old".format(["mark", 31]);
        trace(message);
    }
}

class StringUtil {
    public static function format(value:String, values:Array<Any>) {
        for (i in 0...values.length) {
            value = value.replace('{$i}', values[i]);
        }
        return value;
    }
}

在线尝试:https://try.haxe.org/#8A17A