亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#自定義字符串替換Replace方法實例

2020-01-24 02:16:55
字體:
來源:轉載
供稿:網友

本文實例講述了C#自定義字符串替換Replace方法。分享給大家供大家參考。具體實現方法如下:

一、問題:

前一陣遇到一個如標題的算法題,是將原有字符串的某些片段替換成指定的新字符串片段,例如將源字符串:abcdeabcdfbcdefg中的cde替換成12345,得到結果字符串:ab12345abcdfb12345fg,即:abcdeabcdfbcdefg -> ab12345abcdfb12345fg。

二、實現方法:

顯然不能用string.Replace方法,需要自定義一個方法 string Replace(string originalString, string strToBeReplaced, string strToReplace),下面是我的實現代碼,在半個小時內完成,通過了調試和常規數據的測試驗證,還算是及格吧。

復制代碼 代碼如下:

public static string Replace(string originalString, string strToBeReplaced, string strToReplace)
{
    string resultString = null;
    char[] originalCharArray = originalString.ToCharArray();
    char[] strToBeCharArray = strToBeReplaced.ToCharArray();
    char[] strToCharArray = strToReplace.ToCharArray();
    List<Char> newCharList = new List<Char>();

    for (int i = 0; i < originalCharArray.Count(); i++)
    {
 if (originalCharArray[i] == strToBeCharArray[0])
 {
     bool IsReplace = false;
     for (int j = 0; j < strToBeCharArray.Count(); j++)
     {
  if (((i + j) < originalCharArray.Count())
      && (originalCharArray[i + j] == strToBeCharArray[j]))
  {
      IsReplace = true;
  }
  else
  {
      IsReplace = false;
      break;
  }
     }
     if (IsReplace)
     {
  i += strToBeCharArray.Count() - 1;
  for (int k = 0; k < strToCharArray.Count(); k++)
  {
      newCharList.Add(strToCharArray[k]);
  }
     }
     else
     {
  newCharList.Add(originalCharArray[i]);
     }
 }
 else
 {
     newCharList.Add(originalCharArray[i]);
 }
    }

    resultString = string.Join("", newCharList);
    return resultString;
}

因為有時間限制的要求,我沒有添加注釋,不過代碼量不算多,邏輯也算簡單清晰,沒有注釋也OK啦,缺點是算法復雜度比較高。下面經過本人同意,轉載一下同事Hello Kitty同學對同一問題的實現代碼, 也換一種思路來解決同一個問題。代碼稍多,也添加了一些附加功能,各種注釋也很完備,當然也需要花費更多時間。歡迎大家有興趣一同討論此話題! PS:就在剛才還發現了下面代碼的一個bug,就當是隱藏彩蛋了!

復制代碼 代碼如下:

public class Replace
{
        /// <summary>
        /// Replace 方法
        /// </summary>
        /// <param name="source">原字符串</param>
        /// <param name="find">需要查找的字符串</param>
        /// <param name="replace">替換的字符串</param>
        /// <returns>最終替換成功的字符串</returns>
        public string Replace(string source, string find, string replace)
        {
            // 要查找的字符串大于原來字符串,則不處理,返回原來字符
            if (find.Length > source.Length)
            {
                return source;
            }

            // 記錄找到多少次
            int findCount = 0;
            // 僅用于標記,輔助記錄多少次
            bool flag = true;
            // n:source字符串遍歷的數值;j:find字符串遍歷的數值
            int n = 0, j = 0;
            // s:查找到字符串的開始索引,e:查找到字符串的結束索引
            int s = 0, e = 0;

            while (true)
            {
                // 判斷字符是否相等
                if (source[n] == find[j])
                {
                    // Source 序列+1
                    n++;
                    // 判斷是否為第一位相匹配
                    if (j == 0)
                    {
                        // 賦值給s,查找到頭的索引
                        s = n;
                    }
                    // 查找到后下一次比較find的下一位
                    j++;
                    // 標記暫時找到前面相同的字符
                    flag = true;
                }
                else
                {
                    // 記錄不完全匹配
                    flag = false;
                    // find的索引歸零
                    j = 0;
                    // Source的索引繼續想加
                    n++;
                }

                // 已經查找完畢
                if (j == find.Length)
                {
                    // 完全匹配
                    if (flag)
                    {
                        // 查找的字符數量+1
                        findCount++;
                    }
                    // 記錄查找的數組結尾索引
                    e = n;
                    // source 索引繼續+1
                    n++;
                    // find的索引歸零
                    j = 0;
                    // 計算生成新字符串,之后繼續循環,直到替換所有字符串
                    source = GetNewString(source, find, replace, s, e);
                }
                // Source遍歷完畢,則退出循環
                if (n >= source.Length)
                {
                    break;
                }
            }
            // 最終字符串
            return source;
        }

        /// <summary>
        /// 獲得新的字符串
        /// </summary>
        /// <param name="source">源字符串</param>
        /// <param name="find">需要查找的字符</param>
        /// <param name="replace">需要替換的字符</param>
        /// <param name="startIndex">查找到的字符開始索引</param>
        /// <param name="endIndex">查找到的字符結束索引</param>
        /// <returns>返回替換后的字符串</returns>
        public string GetNewString(string source, string find, string replace, int startIndex, int endIndex)
        {
            // 新字符串的長度
            int newArrayLength = source.Length + endIndex - startIndex;
            // 新字符數組
            char[] newStringArray = new char[newArrayLength];
            // 將前半部分復制給新字符串
            for (int i = 0; i < startIndex - 1; i++)
            {
                newStringArray[i] = source[i];
            }
            // 當前臨時開始索引
            int tempCurrentStartLength = startIndex - 1;
            // 將需要替換的賦值給新的字符數組
            for (int i = tempCurrentStartLength; i < tempCurrentStartLength + replace.Length; i++)
            {
                newStringArray[i] = replace[i - tempCurrentStartLength];
            }
            // 將之后剩余的字符賦值給新的數組
            for (int i = endIndex + 1; i < newArrayLength; i++)
            {
                newStringArray[i] = source[i - 1];
            }
            // 返回轉換后的字符串
            return string.Concat(newStringArray);
        }
}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品尤物福利片在线观看| 精品无人区乱码1区2区3区在线| 日本欧美一二三区| 欧美疯狂性受xxxxx另类| 亚洲精品按摩视频| 国产成人精品久久亚洲高清不卡| 久久久久亚洲精品成人网小说| 中文字幕精品久久久久| 日韩欧美亚洲范冰冰与中字| 亚洲一区二区在线播放| 久久免费精品视频| 最近日韩中文字幕中文| 欧美专区第一页| 精品偷拍各种wc美女嘘嘘| 亚洲第一福利视频| 亚洲热线99精品视频| 亚洲欧洲av一区二区| 欧美黑人一级爽快片淫片高清| 日韩在线免费av| 欧美成人在线影院| 欧美精品成人91久久久久久久| 精品毛片三在线观看| 日韩欧美中文字幕在线播放| 亚洲欧洲日产国产网站| 国产精品视频一| 2023亚洲男人天堂| 最近中文字幕mv在线一区二区三区四区| 亚洲欧美激情在线视频| 少妇高潮 亚洲精品| 亚洲人线精品午夜| 一道本无吗dⅴd在线播放一区| 国产一区二区在线免费视频| 久久伊人色综合| 国产在线高清精品| 欧美最近摘花xxxx摘花| 欧洲精品久久久| 国产日韩av在线播放| 在线播放国产一区中文字幕剧情欧美| 久久人人97超碰精品888| 亚洲国产91精品在线观看| 亚洲女人被黑人巨大进入al| 91高清免费在线观看| 亚洲成人久久久久| 欧美美最猛性xxxxxx| 久久久久久av| 91中文字幕在线观看| 亚洲美女av在线播放| 一区二区成人av| 国产99久久精品一区二区永久免费| 日韩精品在线第一页| 在线日韩中文字幕| 欧美电影在线免费观看网站| 亚洲视频视频在线| 成人久久久久久久| 91高潮精品免费porn| 亚洲影院污污.| 中文字幕亚洲精品| 久久人体大胆视频| 国产精品黄页免费高清在线观看| 黑人巨大精品欧美一区二区免费| 国内精品视频一区| 91国产美女在线观看| 亚洲新中文字幕| 国产成人jvid在线播放| 亚洲黄色成人网| 日韩中文字幕在线精品| 亚洲三级黄色在线观看| 日本a级片电影一区二区| 欧美猛交免费看| 欧美精品一二区| 久久久久久久香蕉网| 色噜噜狠狠狠综合曰曰曰88av| 成人春色激情网| 国产精品人人做人人爽| 日韩电影中文字幕在线| 一区二区欧美在线| 国产精品免费一区| 国产精品自拍偷拍视频| 日韩禁在线播放| 91免费在线视频| 国产精品va在线播放我和闺蜜| 日韩精品视频中文在线观看| 亚洲爱爱爱爱爱| 久久综合色88| 亚洲美女av电影| 日本国产欧美一区二区三区| 揄拍成人国产精品视频| 亚洲电影免费观看高清完整版在线观看| 国产一区二区三区在线视频| 欧美日韩成人精品| 九九九久久国产免费| 2019中文字幕全在线观看| 亚洲精品一区二区久| 久久艹在线视频| 久久久久久久亚洲精品| 欧美午夜激情在线| 日韩电影免费在线观看| 欧美激情久久久久久| 久久久久久久国产| 国产精品美女久久| 久久久天堂国产精品女人| 久久久久久国产| 精品性高朝久久久久久久| 欧美激情国产精品| 久久国产精品久久久久久| 日韩精品免费在线视频| 亚洲肉体裸体xxxx137| 91国产一区在线| 成人黄色免费网站在线观看| 欧美日韩一区二区免费视频| 亚洲肉体裸体xxxx137| 亚洲国产精品va在线看黑人| 久久全球大尺度高清视频| 午夜精品久久久久久久男人的天堂| 亚洲福利影片在线| 国产精品久久不能| www.欧美精品| 亚洲一区二区三区四区视频| 久久视频在线看| 欧美日韩国产色视频| 久久人人爽人人爽人人片av高请| 日韩电影大全免费观看2023年上| 久久成年人视频| 欧美裸体视频网站| 亚洲激情久久久| 欧美亚洲免费电影| 国产精品7m视频| 国内精品久久久久影院 日本资源| 成人精品一区二区三区电影黑人| 欧美二区乱c黑人| 国产精品久久电影观看| 国产91ⅴ在线精品免费观看| 91精品国产91久久久久| 久久视频在线播放| 日本高清不卡的在线| 日韩一区二区av| 欧美—级高清免费播放| 欧美激情在线有限公司| 亚洲日本aⅴ片在线观看香蕉| 日韩福利伦理影院免费| 国产成人精品久久二区二区| 黑人狂躁日本妞一区二区三区| 国产日韩在线看片| 97在线观看视频国产| 国产亚洲欧美日韩美女| 色诱女教师一区二区三区| 亚洲电影免费观看高清完整版| 亚洲欧美资源在线| 国产精品一二三在线| 欧美成人激情在线| 日韩在线观看你懂的| 亚洲自拍偷拍在线| 亚洲成人精品av| 亚洲女人初尝黑人巨大| 91中文精品字幕在线视频| 亚洲美女在线看| 国产精品青草久久久久福利99| 久久精品一区中文字幕| 国产999在线观看| 欧美麻豆久久久久久中文| 日本亚洲精品在线观看| 在线观看日韩www视频免费| 98精品国产自产在线观看| 5566日本婷婷色中文字幕97|