2009-07-21 19 views
4

我們有一個字符串,其最大限制爲20個字。如果用戶輸入的內容超過20個單詞,則需要在第20個單詞處截斷字符串。我們如何自動化這個?我們可以用#GetToken(myString,20,'')#找到第20個標記,但不確定如何找到它的位置以便進行左修剪。有任何想法嗎? 在此先感謝。如何查找第n個標記的位置

回答

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 ([email protected]) 
* @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是一個出色的資源,當我正在尋找這樣的東西時,通常是我的第一站。我高度推薦它。

0

也許你能避免修剪,而是從頭重建的結果,類似的信息(僞代碼,我不知道的ColdFusion):

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

將這項工作?

0

不知道CF是否提供這種功能,但通常有一個LastIndexOf(字符串標記)方法。將其與子字符串函數結合使用。對於isntance(psuedocode):

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

也可以使用正則表達式(組1包含匹配):^(?:\w+\s+){19}(\w+)

相關問題