kết quả từ 1 tới 3 trên 3

Cắt n ký tự đầu tiên của một chuỗi với C#

  1. #1
    Ðến Từ
    Thành phố Bạc Liêu
    Thành Viên Thứ: 56113
    Giới tính: Nam
    Bài gửi
    3

    Cắt n ký tự đầu tiên của một chuỗi với C#

    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
    Quick reply to this message Trả lời       

  2. #2
    Ðến Từ
    Tỉnh Khác
    Thành Viên Thứ: 174223
    Bài gửi
    10

    Reply: Cắt n ký tự đầu tiên của một chuỗi với C#

    Thêm một thuật toán nữa cho các bạn tham khảo

    Mã:
    public static string SubString(string inputString, int length)
            {
                try
                {
                    //Nếu chuỗi nhỏ hơn chiều dài cần cắt thì return về chính chuỗi truyền vào
                    if (inputString.Length <= length)
                        return inputString;
    
    
                    string strResult = string.Empty;
                    int iEmptyIndex = 0;
    
    
                    //Nếu chỉ có 1 từ --> ko cho cắt (vô nghĩa)
                    iEmptyIndex = inputString.IndexOf(" ");
                    if (iEmptyIndex != -1)
                    {
                        //Cắt chuỗi yêu cầu
                        strResult = inputString.Substring(0, length);
    
    
                        //Tìm index của khoảng trắng kế bên chuổi cắt. Nếu là khoảng trắng --> return kết quả là strSplited.
                        //Ngược lại: cắt chuổi ký tự thừa của strSplited
                        iEmptyIndex = inputString.IndexOf(" ", length);
                        if (iEmptyIndex == length)
                            return strResult;
                        else
                        {
                            //strResult: Cộng hò --> Cộng
                            iEmptyIndex = strResult.LastIndexOf(" ");
                            if (iEmptyIndex != -1)
                            {
                                strResult = strResult.Substring(0, iEmptyIndex);
                            }
                        }
                    }
                    return strResult;
                }
                catch { return null; }
            }

  3. #3
    Ðến Từ
    Huyện Hòa Bình
    Thành Viên Thứ: 163740
    Giới tính: Nam
    Bài gửi
    1

    Reply: Cắt n ký tự đầu tiên của một chuỗi với C#

    ôoooooooooooooooooooooooooooo