30天C#基础巩固------this,base,string中的方法,StringBuilder性能

这里主要是记录下自己学习笔记,希望有个地方在以后可以看到自己走过的路。

关于之前多态的知识有一个口诀,很好理解里面的override和new,virtual关键字。

“new则隐藏,over重写,隐藏看类型,重写只管新”

面向对象的三大特征:封装,继承,多态。

非面向对象的特征---静态

静态一般的是使用的是方法,很少有字段。

下面是修饰符的图片,关于修饰符这个要在项目中使用,慢慢的理解。

一:this和base的区别。

这两个都是在我们进行开发经常使用的,关于this代表类的本身,我们可以利用它来对类进行设置,取值。而base代表父类,可以为其赋值。

    public class Person
    {
        private string name;
        private int age;
        private char sex;
        public Person(string name,int age,char sex)
        {
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
        //一个参数的CTOR,这里的this代表的是第三个构造函数
        public Person(string name):this(name,"男女"[new Random().Next(2)])
        {
        }
        //第三个,这里的this代表的是第一个CTOR
        public Person(string name,char sex):this(name,0,sex)
        {
        }
    }

base我们一般在使用父类里面的东西时使用。

二:关于C#中的string

1:构造方法

上面是vs中string类型中的构造函数,这里面都有中文的注释,可以理解。

2:常用属性

索引(Chars)     比如说str[3]:表示的是字符串中第三个字符。其实string里面和就相当于一个数组一样,有下标,我们可以使用索引来处理。

Length;表示字符串的长度。<下标从0开始>

3:常用方法

增加:

-->

        public string Insert(int startIndex, string value);  //     返回指定字符串在这种情况下插入在指定索引位置的新字符串。
-->
        public string Replace(string oldValue, string newValue); //返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串。

-->

Concat()用来连接两个数据(数字,string,int,char等)

            string strss = string.Concat(strs,"aaa");          //注意这里的string.Concat();

-->

public static string Join(string separator, params object[] values);//串联字符串数组的所有元素,其中在每个元素之间使用指定的分隔符。 separator:要用作分隔符的字符串。
            string[] str = { "111", "222", "333" };
            string strss = string.Join("",str); //注意这里的string.Join("",str);把数组中的""去掉分离,合并为一个string类型
             Console.WriteLine(strss);
            Console.ReadKey();

删除

-->

public string Remove(int startIndex, int count); //     返回指定数量字符在当前这个实例起始点在已删除的指定的位置的新字符串。
            string str = "012345";
            str=str.Remove(1,2);  //删除,从下标1开始数2个删除,余下0345
            Console.WriteLine(str);
            Console.ReadKey();

-->

            string str = "012345";
            str = str.Substring(1, 3);   //截取字符串从下标为1开始数3个数。
              Console.WriteLine(str);
            Console.ReadKey();

-->

public string Trim();从当前 System.String 对象移除所有前导空白字符和尾部空白字符。
            string str = " 012  34  5  ";
            Console.WriteLine(str);
             str = str.Trim();
            Console.WriteLine(str);

-->

        public string PadLeft(int totalWidth, char paddingChar);
 
            string str = "12434";
            str = str.PadLeft(10, ‘0‘);   //返回一个新字符串,该字符串通过在此实例中的字符左侧填充指定的 Unicode 字符来达到指定的总长度,从而使这些字符右对齐。
             Console.WriteLine(str);
            str = "12434";
            str = str.PadRight(10, ‘9‘);     //和上面的一样,只是从右边来填充9
            Console.WriteLine(str);

改:

-->

首先ToCharArray(),在Join或Concat或构造函数

查看:

-->

public bool Contains(string value);//返回一个值,该值指示指定的 System.String 对象是否出现在此字符串中。

eg:

            string str = "21434";
             bool s=str.Contains("7"); //看str中是否有7
            Console.WriteLine(s);

-->

 public int IndexOfAny(char[] anyOf);//报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的从零开始的索引。

其它:

-->

 bool a=string.IsNullOrEmpty(str); //字符串判空

-->

        public string[] Split(params char[] separator);//     返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。
eg:

我们可以使用Split里面的参数就可以把多余的空格去掉。

现在就把里面的空格去掉了,a里面存取了4个string类型。

-->两个字符串的比较

三:StringBuilder

-->字符串不可变,长期拼接字符串性能较低

eg:通过Stopwatch类来计时;

            Stopwatch sw = new Stopwatch();         //提供一组方法和属性,可用于准确地测量运行时间。
            sw.Start();
            string s="";
            for (int i = 0; i < 10000; i++)
            {
                s+= i.ToString();
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);              //显示总共使用了多长的时间
            Console.ReadKey();
 

这里要是把10000变为1000000性能就特别底下,时间会特别大。

现在我们换成StringBulider来看看。

            Stopwatch sw = new Stopwatch();         //提供一组方法和属性,可用于准确地测量运行时间。
            sw.Start();
            StringBuilder sb=new StringBuilder();         //设置一个StringBuilder来保存字符串,性能特别好。
            for (int i = 0; i <100000; i++)
            {
                sb.Append(i.ToString());
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);              //显示总共使用了多长的时间
            Console.ReadKey();

这里我换成了100000性能还是这么的6.

时间: 2024-11-05 11:47:08

30天C#基础巩固------this,base,string中的方法,StringBuilder性能的相关文章

C++中 string 中的方法的使用详解(心得)

string 字符串在所有的语言中都非常重要,c++也不例外,接下来我们将介绍string中的常用方法 1. size() 和 length() 函数 : 他们返回字符串的真实长度,且不会因为空格而截断,这两个方法完全等价,使用及输出如下: #include<iostream> #include<string> using namespace std; int main(void) { string s = "dasddasd"; printf("si

java String 中 intern方法的概念

1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null: 3. String str=”kvill”:String str=new String (“kvill”);的区别: 在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念. 常量池(const

String中intern方法的作用

前言 读完这篇文章你可以了解,String对象在虚拟机内存中的存放,intern的作用,这么多String对象的创建到底有什么区别,String 创建的对象有几个!! 正题 先科普几个知识点1.常量池存放于方法区中 2.jdk1.6 方法区放在永久代(java堆的一部分),jdk1.7 特别将字符串常量池移动到了的堆内存中(使用参数-XX:PermSize 和-XX:MaxPermSize指定大小),jdk1.8放在单独的元空间里面(-XX:MaxMetaspaceSzie设定大小),和堆相独立

Java基础-重写-子类重写父类中的方法后执行情况

代码 public class Test { public static void main(String[] args) { Shape shape = new Circle(); System.out.println(shape.name); shape.printType(); shape.printName(); } } class Shape { public String name = "shape"; public Shape(){ System.out.println(

String中的方法

这里只是总结一些我觉得有用可能会用到的: 详细api:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh 1.str.getChars(int strBegin,  int strEnd,  char[] dst,  int  dstBegin):将str的一部分(下标从strBegin到strEnd-1)复制到字符数组dst从dstBegin开始到des[dstBegin+(复制的长度)]将会覆盖原来的字符..注意控制下标.. String s1

String中substring方法内存泄漏问题

众所周知,JDK中以前String类中的substring方法存在内存泄漏问题,之所以说是以前,是因为JDK1.7及以后的版本已经修复了,我看都说JDK1.6的版本也存在这个问题,但是我本机上安装的1.6看了看源码不存在内存泄漏问题啊,又看了1.7的源码,和我本机的1.6的一样,是不是我的1.6版版其实是1.7的?!唉,不管了,反正1.7版本肯定没有这个问题(1.5及更老版本肯定有)了,大家就放心的用吧. 之所以存在内存泄漏的问题,是因为原先的版本中,substring是这样实现的: publi

String中各方法多数情况下返回新的String对象

(1)subString是否始终返回一个新串? 事实并非如此,subString只有在截取的子串是真子串(真子串指子串与原串不相同)时才会返回一个新声明的子串.当截取的是整个字符串时,则返回自身,具体可参考源码: subString方法用来截取子串,方法的使用有两种形式String subString(int begin)和String subString(int begin, int end).具体可参考JDK文档. public String substring(int beginIndex

String中hashCode方法的线程安全

class String{ //默认值是0 int hash; public int hashCode() { //将成员变量hash缓存到局部变量 int h = hash; //这里使用的是局部变量,没有多线程修改的风险 if (h == 0 && value.length > 0) { char val[] = value; //求hashcode过程使用局部h变量防止产生静态条件 for (int i = 0; i < value.length; i++) { h =

【转载】Java基础之String中equals,声明方式,等大总结

转载请注明出处:http://blog.csdn.net/dmk877/article/details/49420141 无论你是一个编程新手还是老手,提到String你肯定感觉特别熟悉,因为String类我们在学习java基础的时候就已经学过,但是String类型有我们想象的那么简单吗?其实不然,String类型的知识点还是比较多的.今天就和大家来一起讨论一下,关于String的一些容易让人疑惑的地方,废话不多说进入正题...如有谬误请批评指正,如果有疑问请留言.我会在第一时间修改或回答 通过