几个字符串操作方法
来源:互联网 发布:博睿软件测试 编辑:程序博客网 时间:2024/06/06 05:30
/// <summary> /// 获取指定文件的扩展名 例: .txt /// </summary> /// <param name="fileName">指定文件名</param> /// <returns>扩展名</returns> public static string GetFileExtName(string fileName) { if (GF_IsOk.IsStrNullOrEmpty(fileName) || fileName.IndexOf('.') <= 0) return ""; fileName = fileName.ToLower().Trim(); return fileName.Substring(fileName.LastIndexOf('.'), fileName.Length - fileName.LastIndexOf('.')); } public static string GetSubString(string p_SrcString, int p_Length, string p_TailString) { return GetSubString(p_SrcString, 0, p_Length, p_TailString); } public static string GetUnicodeSubString(string str, int len, string p_TailString) { string result = string.Empty;// 最终返回的结果 int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度 int charLen = str.Length;// 把字符平等对待时的字符串长度 int byteCount = 0;// 记录读取进度 int pos = 0;// 记录截取位置 if (byteLen > len) { for (int i = 0; i < charLen; i++) { if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2 byteCount += 2; else// 按英文字符计算加1 byteCount += 1; if (byteCount > len)// 超出时只记下上一个有效位置 { pos = i; break; } else if (byteCount == len)// 记下当前位置 { pos = i + 1; break; } } if (pos >= 0) result = str.Substring(0, pos) + p_TailString; } else result = str; return result; } /// <summary> /// 取指定长度的字符串 /// </summary> /// <param name="p_SrcString">要检查的字符串</param> /// <param name="p_StartIndex">起始位置</param> /// <param name="p_Length">指定长度</param> /// <param name="p_TailString">用于替换的字符串</param> /// <returns>截取后的字符串</returns> public static string GetSubString(string p_SrcString, int p_StartIndex, int p_Length, string p_TailString) { string myResult = p_SrcString; Byte[] bComments = Encoding.UTF8.GetBytes(p_SrcString); foreach (char c in Encoding.UTF8.GetChars(bComments)) { //当是日文或韩文时(注:中文的范围:\u4e00 - \u9fa5, 日文在\u0800 - \u4e00, 韩文为\xAC00-\xD7A3) if ((c > '\u0800' && c < '\u4e00') || (c > '\xAC00' && c < '\xD7A3')) { //if (System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[\u0800-\u4e00]+") || System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[\xAC00-\xD7A3]+")) //当截取的起始位置超出字段串长度时 if (p_StartIndex >= p_SrcString.Length) return ""; else return p_SrcString.Substring(p_StartIndex, ((p_Length + p_StartIndex) > p_SrcString.Length) ? (p_SrcString.Length - p_StartIndex) : p_Length); } } if (p_Length >= 0) { byte[] bsSrcString = Encoding.Default.GetBytes(p_SrcString); //当字符串长度大于起始位置 if (bsSrcString.Length > p_StartIndex) { int p_EndIndex = bsSrcString.Length; //当要截取的长度在字符串的有效长度范围内 if (bsSrcString.Length > (p_StartIndex + p_Length)) { p_EndIndex = p_Length + p_StartIndex; } else { //当不在有效范围内时,只取到字符串的结尾 p_Length = bsSrcString.Length - p_StartIndex; p_TailString = ""; } int nRealLength = p_Length; int[] anResultFlag = new int[p_Length]; byte[] bsResult = null; int nFlag = 0; for (int i = p_StartIndex; i < p_EndIndex; i++) { if (bsSrcString[i] > 127) { nFlag++; if (nFlag == 3) nFlag = 1; } else nFlag = 0; anResultFlag[i] = nFlag; } if ((bsSrcString[p_EndIndex - 1] > 127) && (anResultFlag[p_Length - 1] == 1)) nRealLength = p_Length + 1; bsResult = new byte[nRealLength]; Array.Copy(bsSrcString, p_StartIndex, bsResult, 0, nRealLength); myResult = Encoding.Default.GetString(bsResult); myResult = myResult + p_TailString; } } return myResult; } /// <summary> /// 获取Email HostName 例 liyangfd@gmail.com 获取出来时@gmail.com /// </summary> /// <param name="strEmail"></param> /// <returns></returns> public static string GetEmailHostName(string strEmail) { if (strEmail.IndexOf("@") < 0) { return ""; } return strEmail.Substring(strEmail.LastIndexOf("@")).ToLower(); } /// <summary> /// 返回URL中结尾的文件名 /// </summary> public static string GetFilename(string url) { if (url == null) { return ""; } string[] strs1 = url.Split(new char[] { '/' }); return strs1[strs1.Length - 1].Split(new char[] { '?' })[0]; } /// <summary> /// 根据阿拉伯数字返回月份的名称(可更改为某种语言) /// </summary> public static string[] Monthes { get { return new string[] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; } }
/// <summary> /// 获得伪静态页码显示链接 /// </summary> /// <param name="curPage">当前页数</param> /// <param name="countPage">总页数</param> /// <param name="url">超级链接地址</param> /// <param name="extendPage">周边页码显示个数上限</param> /// <returns>页码html</returns> public static string GetStaticPageNumbers(int curPage, int countPage, string url, string expname, int extendPage) { return GetStaticPageNumbers(curPage, countPage, url, expname, extendPage, 0); } /// <summary> /// 获得伪静态页码显示链接 /// </summary> /// <param name="curPage">当前页数</param> /// <param name="countPage">总页数</param> /// <param name="url">超级链接地址</param> /// <param name="extendPage">周边页码显示个数上限</param> /// <param name="forumrewrite">当前版块是否使用URL重写</param> /// <returns>页码html</returns> public static string GetStaticPageNumbers(int curPage, int countPage, string url, string expname, int extendPage, int forumrewrite) { int startPage = 1; int endPage = 1; string t1 = "<a href=\"" + url + "-1" + expname + "\">«</a>"; string t2 = "<a href=\"" + url + "-" + countPage + expname + "\">»</a>"; if (forumrewrite == 1) { t1 = "<a href=\"" + url + "/1/list" + expname + "\">«</a>"; t2 = "<a href=\"" + url + "/" + countPage + "/list" + expname + "\">»</a>"; } if (forumrewrite == 2) { t1 = "<a href=\"" + url + "/\">«</a>"; t2 = "<a href=\"" + url + "/" + countPage + "/\">»</a>"; } if (countPage < 1) countPage = 1; if (extendPage < 3) extendPage = 2; if (countPage > extendPage) { if (curPage - (extendPage / 2) > 0) { if (curPage + (extendPage / 2) < countPage) { startPage = curPage - (extendPage / 2); endPage = startPage + extendPage - 1; } else { endPage = countPage; startPage = endPage - extendPage + 1; t2 = ""; } } else { endPage = extendPage; t1 = ""; } } else { startPage = 1; endPage = countPage; t1 = ""; t2 = ""; } StringBuilder s = new StringBuilder(""); s.Append(t1); for (int i = startPage; i <= endPage; i++) { if (i == curPage) { s.Append("<span>"); s.Append(i); s.Append("</span>"); } else { s.Append("<a href=\""); if (forumrewrite == 1) { s.Append(url); if (i != 1) { s.Append("/"); s.Append(i); } s.Append("/list"); s.Append(expname); } else if (forumrewrite == 2) { s.Append(url); s.Append("/"); if (i != 1) { s.Append(i); s.Append("/"); } } else { s.Append(url); if (i != 1) { s.Append("-"); s.Append(i); } s.Append(expname); } s.Append("\">"); s.Append(i); s.Append("</a>"); } } s.Append(t2); return s.ToString(); } /// <summary> /// 获得帖子的伪静态页码显示链接 /// </summary> /// <param name="expname"></param> /// <param name="countPage">总页数</param> /// <param name="url">超级链接地址</param> /// <param name="extendPage">周边页码显示个数上限</param> /// <returns>页码html</returns> public static string GetPostPageNumbers(int countPage, string url, string expname, int extendPage) { int startPage = 1; int endPage = 1; int curPage = 1; string t1 = "<a href=\"" + url + "-1" + expname + "\">«</a>"; string t2 = "<a href=\"" + url + "-" + countPage + expname + "\">»</a>"; if (countPage < 1) countPage = 1; if (extendPage < 3) extendPage = 2; if (countPage > extendPage) { if (curPage - (extendPage / 2) > 0) { if (curPage + (extendPage / 2) < countPage) { startPage = curPage - (extendPage / 2); endPage = startPage + extendPage - 1; } else { endPage = countPage; startPage = endPage - extendPage + 1; t2 = ""; } } else { endPage = extendPage; t1 = ""; } } else { startPage = 1; endPage = countPage; t1 = ""; t2 = ""; } StringBuilder s = new StringBuilder(""); s.Append(t1); for (int i = startPage; i <= endPage; i++) { s.Append("<a href=\""); s.Append(url); s.Append("-"); s.Append(i); s.Append(expname); s.Append("\">"); s.Append(i); s.Append("</a>"); } s.Append(t2); return s.ToString(); }
/// <summary> /// 获得页码显示链接 /// </summary> /// <param name="curPage">当前页数</param> /// <param name="countPage">总页数</param> /// <param name="url">超级链接地址</param> /// <param name="extendPage">周边页码显示个数上限</param> /// <returns>页码html</returns> public static string GetPageNumbers(int curPage, int countPage, string url, int extendPage) { return GetPageNumbers(curPage, countPage, url, extendPage, "page"); } /// <summary> /// 获得页码显示链接 /// </summary> /// <param name="curPage">当前页数</param> /// <param name="countPage">总页数</param> /// <param name="url">超级链接地址</param> /// <param name="extendPage">周边页码显示个数上限</param> /// <param name="pagetag">页码标记</param> /// <returns>页码html</returns> public static string GetPageNumbers(int curPage, int countPage, string url, int extendPage, string pagetag) { return GetPageNumbers(curPage, countPage, url, extendPage, pagetag, null); } /// <summary> /// 获得页码显示链接 /// </summary> /// <param name="curPage">当前页数</param> /// <param name="countPage">总页数</param> /// <param name="url">超级链接地址</param> /// <param name="extendPage">周边页码显示个数上限</param> /// <param name="pagetag">页码标记</param> /// <param name="anchor">锚点</param> /// <returns>页码html</returns> public static string GetPageNumbers(int curPage, int countPage, string url, int extendPage, string pagetag, string anchor) { if (pagetag == "") pagetag = "page"; int startPage = 1; int endPage = 1; if (url.IndexOf("?") > 0) url = url + "&"; else url = url + "?"; string t1 = "<a href=\"" + url + "&" + pagetag + "=1"; string t2 = "<a href=\"" + url + "&" + pagetag + "=" + countPage; if (anchor != null) { t1 += anchor; t2 += anchor; } t1 += "\">«</a>"; t2 += "\">»</a>"; if (countPage < 1) countPage = 1; if (extendPage < 3) extendPage = 2; if (countPage > extendPage) { if (curPage - (extendPage / 2) > 0) { if (curPage + (extendPage / 2) < countPage) { startPage = curPage - (extendPage / 2); endPage = startPage + extendPage - 1; } else { endPage = countPage; startPage = endPage - extendPage + 1; t2 = ""; } } else { endPage = extendPage; t1 = ""; } } else { startPage = 1; endPage = countPage; t1 = ""; t2 = ""; } StringBuilder s = new StringBuilder(""); s.Append(t1); for (int i = startPage; i <= endPage; i++) { if (i == curPage) { s.Append("<span>"); s.Append(i); s.Append("</span>"); } else { s.Append("<a href=\""); s.Append(url); s.Append(pagetag); s.Append("="); s.Append(i); if (anchor != null) { s.Append(anchor); } s.Append("\">"); s.Append(i); s.Append("</a>"); } } s.Append(t2); return s.ToString(); } /// <summary> /// 判断文件流是否为UTF8字符集 /// </summary> /// <param name="sbInputStream">文件流</param> /// <returns>判断结果</returns> private static bool IsUTF8(FileStream sbInputStream) { int i; byte cOctets; // octets to go in this UTF-8 encoded character byte chr; bool bAllAscii = true; long iLen = sbInputStream.Length; cOctets = 0; for (i = 0; i < iLen; i++) { chr = (byte)sbInputStream.ReadByte(); if ((chr & 0x80) != 0) bAllAscii = false; if (cOctets == 0) { if (chr >= 0x80) { do { chr <<= 1; cOctets++; } while ((chr & 0x80) != 0); cOctets--; if (cOctets == 0) return false; } } else { if ((chr & 0xC0) != 0x80) return false; cOctets--; } } if (cOctets > 0) return false; if (bAllAscii) return false; return true; }
- 几个字符串操作方法
- 几个通用操作方法
- VB字符串操作方法
- javascript中的字符串操作方法
- C#一些字符串操作方法
- javascript中的字符串操作方法
- Python-字符串操作方法(转)
- Python-字符串操作方法(转)
- Python-字符串操作方法(转)
- Python-字符串操作方法(转)
- 字符串的操作方法
- 字符串操作方法localeComplare()
- JS字符串操作方法
- Python-字符串操作方法(转)
- shell字符串操作方法
- Python字符串操作方法详解
- Python 字符串操作方法大全
- Java字符串常用操作方法
- 11月2日-2 typedef的一些东西
- ubuntu 手动编译安装lighttpd配置运行php
- GRASP (object-oriented design)
- Data Guard Switchover Unix shell script
- 根据坐标点获取屏幕图像
- 几个字符串操作方法
- Translate:USACO/humble
- Bada学习-(十六)仿真模拟器
- 几个判断方法
- 数据库常用操作
- 输出一种图形
- 深入浅出之正则表达式(一)
- Two PC SQL Server Synchronise
- lambda过程作为返回值的例子-分析,及一个作用域的例子