【问题标题】:How to find position of nth token如何找到第 n 个令牌的位置
【发布时间】:2009-07-21 17:45:51
【问题描述】:

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

【问题讨论】:

    标签: string coldfusion tokenize


    【解决方案1】:

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

    附言CFLIB.org 是一个出色的资源,当我寻找类似的东西时,它通常是我的第一站。我强烈推荐它。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        这行得通吗?

        【讨论】:

          【解决方案4】:

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

          string lastWord = GetToken(myString, 20, ' ');
          string output = Substring(mystring, 0, LastIndexOf(mystring, lastWord)+StrLength(lastWord));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-12-18
            • 1970-01-01
            • 2010-11-10
            • 1970-01-01
            • 2019-09-28
            • 2015-01-18
            相关资源
            最近更新 更多