在haxe中获取字符串的第一行

问题描述 投票:1回答:2

假设我们有一个多行字符串,比如

var s:String = "my first line\nmy second line\nmy third line\nand so on!";

在Haxe中获取(仅)此字符串的第一行的最佳方法是什么?我知道我可以这样做:

static function getFirstLine(s:String):String {
    var t:String = s.split("\n")[0];
    if(t.charAt(t.length - 1) == "\r") {
        t = t.substring(0, t.length - 1);
    }
    return t;
}

但是我想知道是否有更简单的(预定义)方法...

haxe
2个回答
5
投票

注意@ Gama11的答案效果很好,比这更优雅。

如果你的字符串很长,split将迭代整个事物并分配一个包含字符串中每一行的数组,这两个都是不必要的。另一种选择是indexOf

static function getFirstLine(s:String):String {
    var i = s.indexOf("\n");
    if (i == -1) return s;
    if (i > 0 && s.charAt(i - 1) == "\r") --i;
    return s.substr(0, i);
}

2
投票

我知道标准库中没有内置实用程序,但是你可以通过拆分正则表达式来避免substring()处理\r

static function getFirstLine(s:String):String {
    return ~/\r?\n/.split(s)[0];
}

正则表达式\r?\n可选地匹配回车符后跟换行符。

© www.soinside.com 2019 - 2024. All rights reserved.