2013-04-26 40 views
0

如果文本太長,我想截斷文本,但我需要它截斷整個單詞。我也做了以下內容:設置字符串c#的最大長度,但以整個單詞結尾

var mktText = model.Product.MarketingText; 
      var countChars = mktText.Length; 
      if (countChars > 180) 
      { 
       countChars = countChars - 180; 
       mktText = mktText.Remove(180, countChars); 
       mktText = mktText + "..."; 
      } 

此代碼將最多180個字符,但將削減一個字的一半,其中i字,而有完整的字。

任何幫助表示讚賞。

感謝

+0

什麼是所需的輸出?你只是想添加三個時期? – 2013-04-26 12:28:37

+0

所以舉個例子:如果\t想要最大的字符是22這個: 「坐在墊子上的貓坐在墊子上的貓坐在墊子上的貓」 這將是: 「一隻貓坐在墊阿C ...「 但我希望它完成之前刪除其餘的詞: 」一隻貓坐在墊子上一隻貓......「 – anna 2013-04-26 12:32:49

回答

5

查找該位置之前的最後一個空格這個代碼,把繩剪斷那裏。如果根本沒有空間,或者文本內容太快,那麼就把它切成180。

string mktText = model.Product.MarketingText; 
if (mktText.Length > 180) { 
    int pos = mktText.LastIndexOf(" ", 180); 
    if (pos < 150) { 
    pos = 180; 
    } 
    mktText = mktText.Substring(0, pos) + "..."; 
} 
+0

你的意思是'180'你放了150嗎?不知道所以沒有編輯自己。 – 2013-04-26 12:34:28

+0

@AshBurlaczenko:不,我的意思是150.如果根本沒有空格('pos == -1'),或者文本中的空格太早,文本的剩餘空間就會很少。在這種情況下,無論如何,你只需要放棄和切斷單詞中間的文字。當然,這取決於使用代碼來確定可接受的程度。 – Guffa 2013-04-26 12:36:49

+0

謝謝@Guffa完美的工作我會盡快接受 – anna 2013-04-26 12:38:38

0

你需要打破每個字的文本。並在檢查長度的同時合併新文本。

事情是這樣的:

var listWords = [ORIGINAL_TEXT].Split(' '); 
var text = string.empty; 
for(var str in listWords) 
{ 
    if((text+str).Length > 180) 
    break; 
    text +=str + " "; 
} 

我希望這個想法是清楚的...需要被修改

+0

@Vladimir Shmidt,如果你認爲一個解決方案是錯誤的評論。 – 2013-04-26 12:36:51

+0

對不起空字符串的錯誤應該是CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator 或只是「」:) – 2013-04-26 12:40:35

+0

@VladimirShmidt:號碼組分隔符在某些文化中是逗號。 – Guffa 2013-04-26 12:47:11

0

這應該給你你需要什麼,有一些小的調整:

編輯:調整使用的變量/名稱,和180的最大長度,等等:

var mktText = model.Product.MarketingText; 
var cutPos = new string(mktText.Take(180).ToArray()).LastIndexOf(' '); 
var result = new string(mktText.Take(cutPos).ToArray()); 
0

我找到了一個擴展方法(真的我不記得在哪裏),現在它是我的擴展庫的一部分

public static class StringExtensions 
{ 
    public static string LimitOnWordBoundary(this string str, int count) 
    { 
     if (str.Length <= count - 3) 
      return str; 
     else 
     { 
      int lastspace = str.Substring(0, count - 3).LastIndexOf(' '); 
      if (lastspace > 0 && lastspace > count - 20) 
      { 
       // limits the backward search to a max of 20 chars 
       return str.Substring(0, lastspace) + "..."; 
      } 
      else 
      { 
       // No space in the last 20 chars, so get all the string minus 3 
       return str.Substring(0, count - 3) + "..."; 
      } 
     } 
    } 
} 

,現在叫這樣

string mktText = model.Product.MarketingText.LimitOnWordBoundary(180); 
1

要非常小心與創建的字符串。

嘗試這樣的事情,而不是:

public static class StringExtensions 
{ 
    public static string Truncate(this string text, int length) 
    { 
     var sb = new StringBuilder(text); 

     var i = Math.Min(length, sb.Length); 
     if ((sb.Length > length) && !char.IsWhiteSpace(sb[i])) 
     { 
      while ((--i >= 0) && !char.IsWhiteSpace(sb[i])) 
      { 
      } 
     } 

     if (i > 0) 
     { 
      while ((--i >= 0) && char.IsWhiteSpace(sb[i])) 
      { 
      } 
     } 

     return sb.ToString(0, i + 1); 
    } 
} 
相關問題