4

我们有一个最大限制为 20 个单词的字符串。如果用户输入的内容超过 20 个单词,那么我们需要在第 20 个单词处截断字符串。我们如何实现自动化?我们可以使用#GetToken(myString, 20, ' ')# 找到第 20 个标记,但不确定如何找到它的位置以便左修剪。有任何想法吗?提前致谢。

4

4 回答 4

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;
}

ps CFLIB.org 是一个出色的资源,通常是我寻找此类内容时的第一站。我强烈推荐它。

于 2009-07-21T17:55:42.733 回答
2

也可以使用正则表达式(组 #1 包含匹配项):^(?:\w+\s+){19}(\w+)

于 2009-07-21T18:05:31.170 回答
0

也许您可以避免修剪,而是从头开始重建结果,例如(伪代码,我不知道 ColdFusion):

  result = ''
  for (i = 0; i < 20; ++i)
  {
     result = result + GetToken(myString, i, ' ');
  }

那行得通吗?

于 2009-07-21T17:51:00.403 回答
0

不确定 CF 是否提供此功能,但通常有一个 LastIndexOf(string token) 方法。将其与子字符串函数结合使用。例如(伪代码):

string lastWord = GetToken(myString, 20, ' ');
string output = Substring(mystring, 0, LastIndexOf(mystring, lastWord)+StrLength(lastWord));
于 2009-07-21T17:53:34.487 回答