tango.text.Util(r4774)
License:
BSD style: see license.txt
Version:
Apr 2004: Initial release Dec 2006: South Seas version
Author:
Kris
为各种细小的函数预留位置(Placeholder)。这些函数全部被模板化,意在可用于char、wchar、dchar字符数组。不过,它们也可以正确地操作别的数组类型。
这些函数的大多数一个索引值,表示的判断标准已经得到确认。当判断标准不匹配时,函数返回一个表示提供给它们的数组长度的值。也就是说,对于C函数可能典型地返回-1的场景,这些函数返回长度(length)来代替。这个可以同D的切割操作很好的工作:
1 2 3 4 5 | auto text = "happy:faces"; assert (text[0 .. locate (text, ':')] == "happy"); assert (text[0 .. locate (text, '!')] == "happy:faces"); |
contains()函数更便于琐碎的查找情况:
1 2 | if (contains ("fubar", '!')) ... |
注意,某些函数希望一个uint作为参数,如果提供一个int来代替,D模板比较(template-matching)算法会失败。这是典型的"template not found"(模板找不到)错误的原因。也要注意到在当前不能被IFTI支持名称重载,因此在这里也不应用。
为了限制命名空间污染,高度建议应用D的别名导入(import alias)机制来使用这个模块。
1 2 3 | import Util = tango.text.Util; auto s = Util.trim (" foo "); |
函数模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | trim (source) // 修剪空白 triml (source) // 修剪空白 trimr (source) // 修剪空白 strip (source, match) // 修剪元素 stripl (source, match) // 修剪元素 stripr (source, match) // 修剪元素 chopl (source, match) // 修剪模式匹配 chopr (source, match) // 修剪模式匹配 delimit (src, set) // 按定界符分离(delims) split (source, pattern) // 按模式分离 splitLines (source); //按行分离 head (source, pattern, tail) // 分离到头和尾 join (source, postfix, output) //结合文字片段 prefix (dst, prefix, content...) // 把文字片段置于前面 postfix (dst, postfix, content...) // 把文字片段置于后面 combine (dst, prefix, postfix, content...) // combine lotsa stuff repeat (source, count, output) //重复source(源) replace (source, match, replacement) // 替换字符 substitute (source, match, replacement) // 替换/移除匹配 count (source, match) //统计实例 contains (source, match) //是否包含字符? containsPattern (source, match) // 判断是否包含模式? index (source, match, start) //查找匹配索引 locate (source, match, start) // 查找字符 locatePrior (source, match, start) // 查找前面的字符 locatePattern (source, match, start); // 查找模式 locatePatternPrior (source, match, start); // 查找前面的模式 indexOf (s*, match, length) // 低级查看 mismatch (s1*, s2*, length) // 低级比较 matching (s1*, s2*, length) // 低级比较 isSpace (match) //判断是否是空白? unescape(source, output) //转换' \ '的前缀 layout (destination, format ...) // 非常轻量级的 printf(格式化输出) lines (str) // foreach lines quotes (str, set) // foreach quotes delimiters (str, set) // foreach delimiters patterns (str, pattern) // foreach patterns |
请注意,在这个模块中谈及的任何'pattern'(模式)都引用一个字符模式,而且不是正则表达式描述符。要使用正则表达式操作使用Regex模块。
-
T[] trim(T)(T[] source) ¶#
- 整理提供的数组,从两端剥离空白。返回原始内容的一个切片。 T[] triml(T)(T[] source) ¶#
- 整理提供的数组,从左边剥离空白。返回原始内容的一个切片。 T[] trimr(T)(T[] source) ¶#
- 整理提供的数组,从右边剥离空白。返回原始内容的一个切片。 T[] strip(T)(T[] source, T match) ¶#
- 整理提供的数组,从两端剥离提供的匹配( match)。返回原始内容的一个切片。 T[] stripl(T)(T[] source, T match) ¶#
- 整理提供的数组,从左手边剥离提供的匹配( match)。返回原始内容的一个切片。 T[] stripr(T)(T[] source, T match) ¶#
- 整理提供的数组,从右手边剥离提供的匹配( match)。返回原始内容的一个切片。 T[] chopl(T)(T[] source, T[] match) ¶#
- 通过从左手边剥离提供的匹配( match)切削源。返回原始内容的一个切片。 T[] chopr(T)(T[] source, T[] match) ¶#
- 通过从右手边剥离提供的匹配( match)切削源。返回原始内容的一个切片。 T[] replace(T)(T[] source, T match, T replacement) ¶#
- 用另一个元素替换一个元素的所有实例(在合适的地方)。 T[] substitute(T)(T[] source, T[] match, T[] replacement) ¶#
- 从 source里替换( Substitute)所有匹配的实例。要移除而不替换就设 replacement为 null。 uint count(T)(T[] source, T[] match) ¶#
- 统计所有 source里匹配的实例。 bool contains(T)(T[] source, T match) ¶#
- Returns whether or not the provided array contains an instance of the given match bool containsPattern(T)(T[] source, T[] match) ¶#
- 返回提供的数组是否包含给定的 match。 uint index(T, U = uint)(T[] source, T[] match, U start = 0) ¶#
- 返回下一个从 'start'位置开始的 'match'的实例的索引,如果没有匹配( match)就返回 source.length。参数 'start'默认为 0。 uint rindex(T, U = uint)(T[] source, T match[] match, U start = uint.max) ¶#
- 返回就在 'start'前开始的前一个匹配实例的索引,如果没有匹配就返回 source.length。
- 参数 'start'默认 source.length uint locate(T, U = uint)(T[] source, T match, U start = 0) ¶#
- 返回从位置 'start'开始的下一个匹配实例的索引,如没有匹配就返回 source.length 。
- 参数 'start'默认为 0。 uint locatePrior(T, U = uint)(T[] source, T match, U start = uint.max) ¶#
- 返回就在 'start'前开始的前一个匹配实例的索引,如果没有匹配就返回 source.length。
- 参数 'start'默认 source.length。 uint locatePattern(T, U = uint)(T[] source, T[] match, U start = 0) ¶#
- 返回从位置 'start'开始的下一个匹配实例的索引,如没有匹配就返回 source.length 。
- 参数 'start'默认为 0。 uint locatePatternPrior(T, U = uint)(T[] source, T[] match, U start = uint.max) ¶#
- 返回就在 'start'前开始的前一个匹配实例的索引,如果没有匹配就返回 source.length。
- 参数 'start'默认 source.length。 T[] head(T)(T[] src, T[] pattern, out T[] tail) ¶#
- 按第一个模式实例分离提供的数组,返回合成的头和尾。模式从两个文字片段排除。如果一个文字片段没有找到,尾( tail)会变成 null,并且返回值是原始的数组。 T[] tail(T)(T[] src, T[] pattern, out T[] head) ¶#
- 按最后的模式实例分离提供的数组,返回合成的头和尾。模式从两个文字片段排除。如果一个文字片段没有找到,头( head)会变成 null,并且返回值是原始的数组。 T[][] delimit(T)(T[] src, T[] set) ¶#
- 无论定界符集合在哪里找到都分离提供的数组,返回合成的片段。定界符从每一个片段中排除。注意定界符是作为一个交替集合匹配而不是作为一个模式。按一个简单的定界符分离要比按一个选择集分离快得非常多。
注:src内容在这个函数中不被复制,由切割代替。
-
T[][] split(T)(T[] src, T[] pattern) ¶#
- 无论模式实例在哪里找到都分离提供的数组,返回合成的片段。模式从每一个片段中排除。
- 注 :src内容在这个函数中不被复制,由切割代替。 T[][] splitLines(T)(T[] src) ¶#
- 转换文字成一系列行,这里的每一行用一个 \n或 \r\n组合识别。行末端从每个合成数组中剥离。
- 注 :src内容在这个函数中不被复制,由切割代替。 T[] join(T)(T[][] src, T[] postfix = null, T[] dst = null) ¶#
- 合并一系列文字片段到一起,每个片段添加一个后缀模式。一个任选的输出缓冲器可以被提供用来避免堆活动 --它应该是大得足以容纳整个输出,否则将用堆来代替。
- 返回一个输出的有效切片,包含连结文字。 T[] prefix(T)(T[] dst, T[] prefix, T[][] src...) ¶#
- 合并一系列文字片段到一起,每个片段前置一个前缀模式。一个任选的输出缓冲器可以被提供用来避免堆活动 --它应该是大得足以容纳整个输出,否则将用堆来代替。
- 注意 ,不像 join(),首先要指定输出缓冲区 ,这样尾随字符串集合可以被提供。
- 返回一个输出的有效切片,包含连结文字。 T[] postfix(T)(T[] dst, T[] postfix, T[][] src...) ¶#
- 合并一系列文字片段到一起,每个片段添加一个任选的后缀模式。一个任选的输出缓冲器可以被提供用来避免堆活动 --它应该是大得足以容纳整个输出,否则将用堆来代替。
- 注意 ,不像 join(),首先要指定输出缓冲区 ,这样尾随字符串集合可以被提供。
- 返回一个输出的有效切片,包含连结文字。 T[] combine(T)(T[] dst, T[] prefix, T[] postfix, T[][] src...) ¶#
- 合并一系列文字片段到一起,每个片段前置和 /或后置一个任选的字符串。一个任选的输出缓冲器可以被提供用来避免堆活动 --它应该是大得足以容纳整个输出,否则将用堆来代替。
- 注意 ,不像 join(),首先要指定输出缓冲区 ,这样尾随字符串集合可以被提供。
- 返回一个输出的有效切片,包含连结文字。 T[] repeat(T, U = uint)(T[] src, U count, T[] dst = null) ¶#
- 把一个数组重复指定次数。一个任选的输出缓冲器可以被提供用来避免堆活动—它应该是大得足以容纳整个输出,否则将用堆来代替。
- 返回一个输出的有效切片,包含连结文字。 bool isSpace(T)(T c) ¶#
- 判断参数是否是一个空白字符? bool matching(T, U = uint)(T* s1, T* s2, U length) ¶#
- 返回两个数组是否有匹配内容。 uint indexOf(T, U = uint)(T* str, T match, U length) ¶#
- 返回 str中的第一个匹配的索引,一旦长度达到就失败。注意失败返回 'length' 成功返回以 0为基础的索引。 uint mismatch(T, U = uint)(T* s1, T* s2, U length)