我们有一个字符串,最大限制为20个字。如果用户输入超过20个单词的内容,则需要在第20个单词处截断该字符串。我们怎样才能自动化呢?我们能够使用#GetToken(myString,20,'')#找到第20个标记,但不确定如何找到它的位置以便左边修剪。有任何想法吗? 提前谢谢。
答案 0 :(得分:8)
UDF ListLeft()应该做你想要的。它采用一个列表并返回包含您定义的元素数量的列表。 “空间”可以作为分隔符。
/**
* A Left() function for lists. Returns the n leftmost elements from the specified list.
*
* @param list List you want to return the n leftmost elements from.
* @param numElements Number of leftmost elements you want returned.
* @param delimiter Delimiter for the list. Default is the comma.
* @return Returns a string,
* @author Rob Brooks-Bilson (rbils@amkor.com)
* @version 1, April 24, 2002
*/
function ListLeft(list, numElements){
var tempList="";
var i=0;
var delimiter=",";
if (ArrayLen(arguments) gt 2){
delimiter = arguments[3];
}
if (numElements gte ListLen(list, delimiter)){
return list;
}
for (i=1; i LTE numElements; i=i+1){
tempList=ListAppend(tempList, ListGetAt(list, i, delimiter), delimiter);
}
return tempList;
}
P.S。 CFLIB.org是一个优秀的资源,通常是我寻找这样的东西时的第一站。我高度推荐它。
答案 1 :(得分:2)
也可以使用正则表达式(组#1包含匹配):^(?:\w+\s+){19}(\w+)
答案 2 :(得分:0)
也许你可以避免修剪,而是从头开始重建结果,比如(伪代码,我不知道ColdFusion):
result = ''
for (i = 0; i < 20; ++i)
{
result = result + GetToken(myString, i, ' ');
}
那会有用吗?
答案 3 :(得分:0)
不确定CF是否提供此功能,但通常会有LastIndexOf(字符串标记)方法。使用它与子字符串函数结合使用。对于isntance(伪代码):
string lastWord = GetToken(myString, 20, ' ');
string output = Substring(mystring, 0, LastIndexOf(mystring, lastWord)+StrLength(lastWord));