Ngày đăng: 14/07/2011 Lượt xem:210 Share:
Hiển thị n ký tự đầu tiên của chuỗi mà không cắt từ nửa chừng của một từ nào là một yêu cầu phổ biến, nhưng nếu đúng ký tự thứ n lại là ký tự nằm giữa 1 từ nào đó thì sao?. Bài viết này minh họa cho bạn cách giải quyết vấn đề này.
Khi lướt web nếu để ý bạn sẽ thấy một số trang hoặc diễn đàn có tiêu đề bài viết quá dài và họ không muốn trình bày tiêu đề bài đó thành nhiều hơn 1 dòng, và tiêu đề bài đó được cắt n ký tự đầu (giả sử 200) nhưng nếu đúng ký tự thứ 200 lại là ký tự nằm giữa 1 từ nào đó, như vậy nếu không giải quyết vấn đề thì số ký tự ta cắt sẽ có từ cuỗi không có ý nghĩa. Bạn tham khảo code sau đây để áp dụng:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Text;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string str1 = @"Với tinh thần chia sẻ, giao lưu và học hỏi với các
bạn tôi lập website hmweb
Chia sẻ là niềm vui. Chia sẻ những gì có thể cũng là
một phần trong những sở thích của tôi.
Tôi hy vọng qua hmweb bạn có thể tìm kiếm
được những thông tin hữu ích cho các bạn";
string str2 = str1.CatChuoi(30);
}
}
public static class StringExtensions
{
/// <summary>
/// Trả về phần đầu của chuỗi và đảm bảo đủ từ
/// </summary>
/// <param name="s"></param>
/// <param name="length">Số ký tự tối đa được cắt</param>
/// <returns>String</returns>
public static string CatChuoi(this string s, int length)
{
if (String.IsNullOrEmpty(s))
throw new ArgumentNullException(s);
var words = s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (words[0].Length > length)
throw new ArgumentException("Từ đầu tiên dài hơn chuỗi cần cắt");
var sb = new StringBuilder();
foreach (var word in words)
{
if ((sb + word).Length > length)
return string.Format("{0}...", sb.ToString().TrimEnd(' '));
sb.Append(word + " ");
}
return string.Format("{0}...", sb.ToString().TrimEnd(' '));
}
}
Giải thích qua về phương pháp trên ta thấy có 2 tham số đầu vào là chuỗi đầu vào s và length là số ký tự tối ta ta sẽ cắt (Tối đa nghĩa là nếu ký tự thứ length là khoảng trắng thí chuỗi cắt được có độ dài là length ngược lại sẽ lấy đến khoảng trắng cuối cũng trước length ). Chúng ta sử dụng String.Split để chia chuỗi ra mảng phân cách bởi khoảng trắng sau đó ta dùng vòng lặp (foreach) để xử lý chuỗi
Hiển thị n ký tự đầu tiên của chuỗi mà không cắt từ nửa chừng của một từ nào là một yêu cầu phổ biến, nhưng nếu đúng ký tự thứ n lại là ký tự nằm giữa 1 từ nào đó thì sao?. Bài viết này minh họa cho bạn cách giải quyết vấn đề này.
Khi lướt web nếu để ý bạn sẽ thấy một số trang hoặc diễn đàn có tiêu đề bài viết quá dài và họ không muốn trình bày tiêu đề bài đó thành nhiều hơn 1 dòng, và tiêu đề bài đó được cắt n ký tự đầu (giả sử 200) nhưng nếu đúng ký tự thứ 200 lại là ký tự nằm giữa 1 từ nào đó, như vậy nếu không giải quyết vấn đề thì số ký tự ta cắt sẽ có từ cuỗi không có ý nghĩa. Bạn tham khảo code sau đây để áp dụng:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Text;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string str1 = @"Với tinh thần chia sẻ, giao lưu và học hỏi với các
bạn tôi lập website hmweb
Chia sẻ là niềm vui. Chia sẻ những gì có thể cũng là
một phần trong những sở thích của tôi.
Tôi hy vọng qua hmweb bạn có thể tìm kiếm
được những thông tin hữu ích cho các bạn";
string str2 = str1.CatChuoi(30);
}
}
public static class StringExtensions
{
/// <summary>
/// Trả về phần đầu của chuỗi và đảm bảo đủ từ
/// </summary>
/// <param name="s"></param>
/// <param name="length">Số ký tự tối đa được cắt</param>
/// <returns>String</returns>
public static string CatChuoi(this string s, int length)
{
if (String.IsNullOrEmpty(s))
throw new ArgumentNullException(s);
var words = s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (words[0].Length > length)
throw new ArgumentException("Từ đầu tiên dài hơn chuỗi cần cắt");
var sb = new StringBuilder();
foreach (var word in words)
{
if ((sb + word).Length > length)
return string.Format("{0}...", sb.ToString().TrimEnd(' '));
sb.Append(word + " ");
}
return string.Format("{0}...", sb.ToString().TrimEnd(' '));
}
}
Giải thích qua về phương pháp trên ta thấy có 2 tham số đầu vào là chuỗi đầu vào s và length là số ký tự tối ta ta sẽ cắt (Tối đa nghĩa là nếu ký tự thứ length là khoảng trắng thí chuỗi cắt được có độ dài là length ngược lại sẽ lấy đến khoảng trắng cuối cũng trước length ). Chúng ta sử dụng String.Split để chia chuỗi ra mảng phân cách bởi khoảng trắng sau đó ta dùng vòng lặp (foreach) để xử lý chuỗi