11---Net基础加强

替换邮箱用户名部分:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using System.Net;

namespace _01替换邮箱用户名部分
{
    class Program
    {
        static void Main(string[] args)
        {
           
            #region MyRegion

            //string msg = "我的邮箱是zxh@itcast.cn杨中科的邮箱是yzk365@chezhihui.com减肥看到了撒steve_zhao@163.com发动机是啦";         
            ////msg = Regex.Replace(msg, @"([-a-zA-Z0-9_.]+)(@[-a-zA-Z0-9]+(\.[a-zA-Z0-9]+){1,})", "***********");
            ////msg = Regex.Replace(msg, @"([-a-zA-Z0-9_.]+)(@[-a-zA-Z0-9]+(\.[a-zA-Z0-9]+){1,})", "****$2");
            ////通过委托实现的字符串替换
            //msg = Regex.Replace(msg, @"([-a-zA-Z0-9_.]+)(@[-a-zA-Z0-9]+(\.[a-zA-Z0-9]+){1,})", GetReplaceString);
            //Console.WriteLine(msg);
            //Console.Read();   
     
            #endregion

            #region MyRegion

            ////WebClient类的主要目的就是从网络上上传或下载内容
            //WebClient wc = new WebClient();
            ////WebRequest
            ////  WebResponse
            //wc.DownloadFile("http://fdsfdsfdsfdsfasdf", @"C:\Users\Administrator\Desktop\图片");
            //wc.DownloadString();
            //wc.DownloadData();
            ////wc.UploadData();
            ////wc.UploadFile();
            ////wc.UploadString();
            //Console.WriteLine("OK");
            //Console.Read();  

            #endregion

        }

        public static string GetReplaceString(Match match)
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < match.Groups[1].Length; i++)
            {
                sb.Append("*");
            }
            sb.Append(match.Groups[2].Value);
            return sb.ToString();
        }

    }
}

 

单词边界断言 \b

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace 单词边界断言
{
    class Program
    {
        static void Main(string[] args)
        {

            //string msg = "The The day after tomorrow is my wedding day.The row, we are looking for is .row. number 10.";

            //// \b就表示单词的边界,什么是单词的边界,
            ////单词的边界表示:一边是单词,一边不是单词,这个就是单词的边界。
            ////  \b表示的是一个断言,什么是断言:只验证,不匹配。
            //msg = Regex.Replace(msg, @"\brow\b", "line");
            //Console.WriteLine(msg);
            //Console.Read();


            #region 练习:Hi,how are you?Welcome to our country!请提取出3个字母的单词。

            ////D-Day
            ////VE-Day

            ////单词:\w  (0-9a-zA-Z_)
            ////环视,断言。
            ////  \w\b\W    \W\b\w
            //string msg = "Hi,how 12are12 you?Welcome to our country!";
            //MatchCollection matches = Regex.Matches(msg, @"\b[a-zA-Z]{3}\b");
            //foreach (Match item in matches)
            //{
            //    Console.WriteLine(item.Value);
            //}
            //Console.ReadKey();

            #endregion

            #region MyRegion

            //注意:\b必须是一边是单词,一边不是单词。这里所说的单词就是指的 \w  所以为空
            string msg = "# ## ### #### ## ### # ###.";
            MatchCollection matches = Regex.Matches(msg, @"\b###\b");
            foreach (Match item in matches)
            {
                Console.WriteLine(item.Value);
            }
            Console.Write("ok");
            Console.ReadKey();

            #endregion



        }
    }
}

 

反向引用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using System.IO;

namespace _03反向引用
{
    class Program
    {
        static void Main(string[] args)
        {
            #region MyRegion

            ////1.将”杨杨杨杨杨中中中中科科科科科”变成”杨中科”。
            ////string msg = "杨杨杨杨杨中中中中科科科科科";
            //string msg = "杨杨杨杨杨中中中中科科科科科AAAAAAAAAAABBBBBBBBBBBBC CCCCCCCCCCCCCCC啊啊啊啊啊啊啊啊啊啊啊买买买嘎嘎嘎嘎嘎得得得得";
            ////这个就是反向引用,在正则表达式内部,要引用内部的分组,则使用\1   \2   \3  \4 等来引用分组。
            //msg = Regex.Replace(msg, @"(.)\1+", "$1");
            //Console.WriteLine(msg);
            //Console.Read();


            ////2.将"我...我我..我我我我....爱爱爱..爱..爱...你你...你..你你你...",变成"我爱你"
            //string msg = "我...我我..我我我我....爱爱爱..爱..爱...你你...你..你你你...";
            //msg = msg.Replace(".", string.Empty);
            //msg = Regex.Replace(msg, @"(.)\1+", "$1");
            //Console.WriteLine(msg);
            //Console.Read();

            //string msg = "我...我我..我我我我....爱爱爱..爱..爱...你你...你..你你你...";
            //MatchCollection match = Regex.Matches(msg, @"((.)\2+\.+)+");
            //foreach (Match item in match)
            //{
            //    Console.WriteLine(item.Value);
            //}
            //Console.WriteLine("共找到了:{0}个匹配。", match.Count);
            //Console.Read();

            #endregion


            #region MyRegion

            //string filetxt = File.ReadAllText("英汉词典TXT格式.txt", Encoding.GetEncoding("gb2312"));
            //MatchCollection matches = Regex.Matches(filetxt, @"[a-zA-Z]*([a-zA-Z])\1+[a-zA-Z]*");
            //using (StreamWriter writer = new StreamWriter("words.txt"))
            //{
            //    foreach (Match item in matches)
            //    {
            //        //Console.WriteLine(item.Value);
            //        writer.WriteLine(item.Value);
            //    }
            //}
            //Console.WriteLine(matches.Count);
            //Console.WriteLine("ok");

            //Console.Read();

            #endregion

        }
    }
}

 

ubb替换

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace _04UBB翻译
{
    class Program
    {
        static void Main(string[] args)
        {

              ////把ubb代码翻译成了html代码
            ////<b>加粗的字体</b>
            //string msg = "[b]加粗的字体[/b]哈哈哈哈[b]传智播客[/b][b]加粗的字体[/b]哈哈哈哈[b]传智播客[/b]";
            //msg = Regex.Replace(msg, @"\[b\](.+?)\[/b\]", "<b>$1</b>");
            //Console.WriteLine(msg);
            //Console.Read();

            //[b]新网站[/b]    <b>新网站</b>
            //[url=http://www.qq.com]秋秋[/url]  <a href="http://www.qq.com">秋秋</a>

            string ubb = "【你好,我发现一个[b]新网站[/b],[b]大家[/b]来看呀[url=http://www.qq.com]秋秋[/url],另外一个有时间也可以看看[url=http://www.rupeng.com]如鹏[/url],还有[url=http://www.itcast.cn]传智播客[/url]】。吼吼!";

            //替换b标签
            string html = Regex.Replace(ubb, @"\[b\](.+?)\[/b\]", "<b>$1</b>", RegexOptions.IgnoreCase);

            //替换url标签  url=http://www.qq.com]秋秋[/url]
            html = Regex.Replace(html, @"\[url=(.+?)\](.+?)\[/url\]", "<a href=\"$1\">$2</a>", RegexOptions.IgnoreCase);

            //<a href=".+">.+</a>

            Console.WriteLine(html);
            Console.Read();

        }
    }
}

 

敏感词过滤

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;


namespace _05敏感词过滤
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //获取用户输入
            string userInput = txtWords.Text.Trim();

            //用来存储 “严禁发帖”的词汇
            StringBuilder sbBanned = new StringBuilder();

            //用来存储 “需要人工审核的词汇”
            StringBuilder sbMode = new StringBuilder();


            string[] lines = File.ReadAllLines("网站过滤词(部分).txt", Encoding.Default);
            for (int i = 0; i < lines.Length; i++)
            {
                string[] parts = lines[i].Split('=');
                if (parts[1] == "{MOD}")
                {
                    sbMode.Append(parts[0] + "|");
                }
                else if (parts[1] == "{BANNED}")
                {
                    sbBanned.Append(parts[0] + "|");
                }
            }
            sbMode.Remove(sbMode.Length - 1, 1);
            sbBanned.Remove(sbBanned.Length - 1, 1);


            //1.检查是否包含严禁发帖的词汇
            if (Regex.IsMatch(userInput, sbBanned.ToString()))
            {
                MessageBox.Show("包含禁止发帖词汇!");
            }
            else if (Regex.IsMatch(userInput, sbMode.ToString()))
            {
                MessageBox.Show("需要人工审核");
            }
            else
            {
                MessageBox.Show("可以发帖1!!");
            }

            //2.检查是否包含需要人工审核的词汇

        }
    }
}

 

委托理解1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ClassLibrary1
{
    public class Class1
    {
        //第二步:通过委托类型,声明一个委托变量。
        public T1Delegate method;
        public void Do()
        {
            Console.WriteLine("=====================");
            Console.WriteLine("=====================");
            //因为委托是引用类型而引用的默认值都是null,所以在使用委托变量之前要进行非空校验
            if(method!=null)
            {
            //这个委托变量method里面将来存储的就是一个方法,所以可以直接调用该变量,就相当于是调用了里面的方法
                method();
            }
            //T1();
            Console.WriteLine("=====================");
            Console.WriteLine("=====================");
        }

        public void T1()
        {
            //Console.WriteLine("这是个T1方法,当前时间为:{0}",DateTime.Now.ToString());
            File.WriteAllText("datetime.txt",DateTime.Now.ToString());
            Console.WriteLine("时间写入完毕!");
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary1
{
      //第一步定义委托
      //定义了委托
     //这里就像定义了一个Person类一样,将来要用的时候还得声明该类型的一个变量才能使用
 
     public  delegate void T1Delegate();

     public delegate void T2Delegate(int n);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _06委托介绍
{
    class Program
    {
        static void Main(string[] args)
        {
            ClassLibrary1.Class1 c1 = new ClassLibrary1.Class1();
            //把M1方法赋值给了委托变量method,这样method就可以使用了,并且里面存储的就是M1方法
            c1.method = M1;
            c1.Do();
            Console.ReadKey();
        }

        static void M1()
        {
            Console.WriteLine("当前时间为:{0}",DateTime.Now.ToString());
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace _07委托介绍
{
    class Program

    { 
        static void Main(string[] args)
        {
            ClassLibrary1.Class1 c1 = new ClassLibrary1.Class1();
            //把M1方法赋值给了委托变量method,这样method就可以使用了,并且里面存储的就是M1方法
            c1.method = M2;
            c1.Do();
            Console.ReadKey();
        }

        static void M2()
        {
            File.WriteAllText("datetime.txt", DateTime.Now.ToString());
            Console.WriteLine("时间写入完毕!");
        }
     }
  
}

 

委托举例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary2
{
      public delegate string ModifyStringDelegate(string str);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary2
{
    public class Class1
    {
        /// <summary>
        /// 修改字符串数组中的每个元素的内容
        /// </summary>
        /// <param name="array"></param>
        public void ChangeStrings(string[] array,ModifyStringDelegate method)
        {
            for (int i = 0; i < array.Length; i++)
            {
                array[i] = method(array[i]);
            }
        
        }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ClassLibrary2;

namespace Wt调用者1
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c1 = new Class1();
            string[] names = new string[] { "John","Bob","Chris","Steve","Johnny"};
            c1.ChangeStrings(names,M1);
            foreach (var item in names)
            {
                Console.WriteLine(item);
            }
            Console.Read();
        }

        static string M1(string element)
        {
            return "" + element + "";
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ClassLibrary2;

namespace Wt调用者2
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c1 = new Class1();
            string[] names = new string[] { "John", "Bob", "Chris", "Steve", "Johnny" };
            c1.ChangeStrings(names, M2);
            foreach (var item in names)
            {
                Console.WriteLine(item);
            }
            Console.Read();
        }

        static string M2(string msg)
        {
            return msg.ToUpper();
        }
    }
}

 

通过委托实现窗体回传值

效果图:

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 委托案例
{
 public delegate void UpdateTextBoxDelegate(string msg);
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 委托案例
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //按钮的单击事件,当点击按钮的时候弹出窗体2
        private void button1_Click(object sender, EventArgs e)
        {
            string content = textBox1.Text.Trim();

            //创建一个窗体2的对象,即创建Form2的对象
            Form2 f2 = new Form2(content,UpdateTextbox);
            f2.Show();
        }

        private void UpdateTextbox(string s)
        {
            this.textBox1.Text = s;
        }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 委托案例
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public Form2(string msg,UpdateTextBoxDelegate method):this()
        {
            //设置窗体2的label显示窗体1传递过来的字符串
            label1.Text=msg;
            this._update = method;
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        private UpdateTextBoxDelegate _update;
        private void button1_Click(object sender, EventArgs e)
        {
            string str = textBox1.Text.Trim();
            if(_update!=null)
            {
                this._update(str);
            }
            this.Close();
        }
    }
}

 

委托-匿名方法-lambda表达式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 匿名方法
{
    class Program
    {
        static void Main(string[] args)
        {

            #region MyRegion

            ////委托类型变量只能赋值委托对象,看起来把一个方法赋值给了一个委托变量,
            ////其实内部也帮我们创建了一个委托对象,把方法作为委托参数传进去
            //Delegate1 md = M1;
            ////Delegate1 md = new Delegate1(M1);
            ////md();
            //md.Invoke();//等价 md();
            //Console.WriteLine("OK");
            //Console.ReadKey();

            ////委托其实编译的时候就是编译成了一个类。
            ////并且这个类继承自MulticastDelegate,并且这个类又继承自Deletegate,
            ////所以说Deletegate是所有委托的祖宗类

            #endregion

            #region MyRegion

            ////带两个参数,带一个返回值的委托
            //Delegate3 md = Add;
            //int n=md(10,20);
            //Console.WriteLine(n);
            //Console.ReadKey();

            #endregion

            #region 匿名方法与lamada表达式

            //匿名方法

            ////无参数我返回值的写法
            //Delegate1 md = delegate() 
            //{ 
            //    Console.WriteLine("我是一个匿名方法"); 
            //};
            //md();

            ////lambda
            //Delegate1 md = () => { Console.WriteLine("我就是一个匿名函数"); };

            ////有一个参数有一个返回值的写法
            ////Delegate4 md = M2;
            ////int x=md(10);
            //Delegate4 md = delegate(int c)
            //{
            //    return c * 2;
            //};
            //int x = md(10);
            //Console.WriteLine(x);
            //Console.ReadKey();

            //Delegate4 md = (x) => { return x * 2; };
            //int result = md(10);
            //Console.WriteLine(result);
            //Console.ReadKey();

            //Delegate4 md = x => x*2;
            //int result = md(10);
            //Console.WriteLine(result);
            //Console.ReadKey();

            ////有两个参数有一个返回值的写法
            //Delegate3 md = delegate(int n,int m)
            //{
            //    return n + m;
            //};
            //int x = md(100,200);
            //Console.WriteLine(x);
            //Console.ReadKey();

            //Delegate3 md = (x,y) => x+y;
            //int result = md(100,200);
            //Console.WriteLine(result);
            //Console.ReadKey();

            //List<int> list = new List<int>() {1,2,3,4,5,6,7,8,9,10 };
            //foreach (var item in list.Where(x => x > 5))
            //{
            //    Console.WriteLine(item);
            //}
            //Console.ReadKey();

            #endregion
           
        }

        static void M1()
        {
            Console.WriteLine("M1方法");
        }

        static int M2(int n)
        {
            return n*2;
        }

        static int Add(int n1,int n2)
        {
            return n1 + n2;
        }

        //要保存这个方法,我们可以再写一个委托来实现。
        static int Add(int n1, int n2,int n3)
        {
            return n1 + n2+n3;
        }

    }

    public delegate void Delegate1();

    public delegate void Delegate2(int n);

    public delegate int Delegate3(int n,int m);

    public delegate int Delegate4(int n);

}

 

posted @ 2014-12-11 14:20  代码沉思者  阅读(257)  评论(0编辑  收藏  举报