string基础

1.字符串常量具备字符串池特性。

字符串常量在创建前,首先在字符串池中查找是否存在相同文本。

如果存在,则直接返回该对象引用;若不存在,则开辟空间存储。

目的:提高内存利用率。

2.字符串具有不可变性。

字符串常量一旦进入内存,就不得再次改变。

若在原位置改变会使其他对象内存被破坏,导致内存泄漏。

当遇到字符串变量引用新值时,会在内存中新建一个字符串,将该字符串地址交由该变量引用。

string str="";
for(int i=0;i<10;i++)
{
str=str+i.ToString();
//字符串的拼接:每次拼接都会产生一个新的对象替换原有引用,每次循环都会产生一个垃圾
}
Console.WriteLine(str);//0123456789

解决方案:

可变字符串StringBuilder:一次开辟可以容纳n个字符的空间

StringBuilder builder=new StringBuilder(10);
int length=builder.Length; //有效字符数量
for(int i=0;i<10;i++)
{ //每次循环都在原有对象上修改
builder.Append(i);//使用builder追加字符串
}
Console.WriteLine(builder.ToString());

拓展:

StringBuilder类

1.构造函数

1/ 无参构造 StringBuilder();

创建的对象没有内容,需要加入值才能打出来

2/ 传入容量 StringBuilder(int capacity);

使用指定的容量初始化对象,参数为建议起始大小

3/ 传入内容 StringBuilder(string value);

使用指定的字符串初始化 System.Text.StringBuilder 类的新实例。

StringBuilder sb=new StringBuilder("www.baidu.com");

4/ StringBuilder(int capacity, int maxCapacity);

初始化StringBuilder 类的新实例,该类起始于指定容量并且可增长到指定的最大容量。

5/ StringBuilder(string value, int capacity);

使用指定的字符串和容量初始化 StringBuilder 类的新实例。

6/ StringBuilder(string value, int startIndex, int length, int capacity);

用指定的子字符串和容量初始化StringBuilder 类的新实例。

value: 字符串,包含用于初始化此实例值的子字符串。

startIndex: value 中子字符串开始的位置。

length: 子字符串中的字符数。

capacity: StringBuilder 的建议起始大小。

2.属性

1/ Capacity: 获取或设置可包含在当前实例所分配的内存中的最大字符数。

2/ Length:获取或设置当前StringBuilder 对象的长度。(有效字符数量)

3/ MaxCapacity: 获取此实例的最大容量。

3.功能函数

1/ Append(…)追加值,有空位坐空位,没有则新加一个空位

…可以是bool,byte,char,char[],decimal,double,float,int,long,object,string….

2/ Append(char value,int repeatCount)

在此实例追加 Unicode 字符的字符串表示形式指定数目的副本。

3/ Append(char[] value, int startIndex, int charCount);

Append(string value, int startIndex, int count);

在此实例追加指定的 Unicode 字符子数组的字符串表示形式。

startIndex: value 中的起始位置

charCount: 要追加的字符数。

4/ AppendFormat略

5/ AppendLine()

将默认的行终止符追加到当前 System.Text.StringBuilder 对象的末尾。

6/ AppendLine(string value);

将后面跟有默认行终止符的指定字符串的副本追加到当前 StringBuilder 对象的末尾。

7/ Clear();

从当前 System.Text.StringBuilder 实例中移除所有字符。

8/ CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count);

将此实例的指定段中的字符复制到目标Char数组的指定段中。

sourceIndex: 此实例中开始复制字符的位置。 索引是从零开始的。

destination: 将从中复制字符的数组。

destinationIndex: destination 中将从其开始复制字符的起始位置。 索引是从零开始的。

count: 要复制的字符数。

9/ EnsureCapacity(int capacity);

确保 System.Text.StringBuilder 的此实例的容量至少是指定值。

capacity: 要确保的最小容量。

返回结果: 此实例的新容量。(取两者的最大值)

StringBuilder sb = new StringBuilder(10);
Console.WriteLine(sb.EnsureCapacity(4)); //10
Console.WriteLine(sb.EnsureCapacity(20)); //20

10/ Equals(StringBuilder sb);

返回一个值,该值指示此实例是否等于指定的对象。

如果此实例和 sb 具有相等的字符串、System.Text.StringBuilder.Capacity 和 System.Text.StringBuilder.MaxCapacity值,则为 true;否则,为 false

11/ Insert(int index, …);

…为各种类型数据;将…的字符串表示形式插入到此实例中的指定字符位置。

index: 此实例中开始插入的位置。 …:要插入的值

12/ Remove(int startIndex, int length);

将指定范围的字符从此实例中移除。

13/ Replace(string oldValue, string newValue);

Replace(byte oldValue, byte newValue);

将此实例中所有指定字符串的匹配项替换为其他指定字符串。

14/ Replace(string oldValue, string newValue, int startIndex, int count);

将此实例的startIndex开始count计字符数的子字符串中所有指定字符串的匹配项替换为其他指定字符串。

15/ ToString();转换为字符串

ToString(int startIndex, int length);

将此实例中子字符串的值转换为 System.String。

string类(一、string基础)的更多相关文章

  1. 关于String类和String[]数组的获取长度方法细节

    一.在Java中,以下代码段有错误的是第(  )行 public static void main(String[] args) { String name = "小新";     ...

  2. JAVA之旅(十六)——String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较

    JAVA之旅(十六)--String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较 过节耽误了几天,我们继续JAVA之旅 一.String概述 String时 ...

  3. Java基础知识强化35:String类之String的其他功能

    1. String类的其他功能: (1)替换功能: String replace(char old, char new) String replace(String old,String new) ( ...

  4. Java基础知识强化34:String类之String类的转换功能

    1. String类的转换功能 String[] split(String regex)//将字符串变成字符串数组(字符串切割) byte[] getBytes()//将字符串变成字节数组 char[ ...

  5. Java基础知识强化33:String类之String类的获取功能

    1. String类的获取功能 int length() // 获取字符串中字符的个数(长度) char charAt(int index)//根据位置获取字符 int indexOf(int ch) ...

  6. Java基础知识强化32:String类之String类的判断功能

    1. String类的判断功能: boolean equals (Object obj ) boolean equalsIgnoreCase (String str ) boolean contain ...

  7. Java基础知识强化31:String类之String的面试题

    1.先看一个图: 2.String面试题: (1)题1: package cn.itcast_02; /* * 看程序写结果 */ public class StringDemo3 { public ...

  8. Java基础知识强化29:String类之String类构造方法

    1. 常用String构造方法使用: package cn.itcast_01; /* * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,我们可以知道 * A: ...

  9. String类,string类的特点

    1,String类是final修饰的,不能被继承 2,String类的底层使用数组存储 JDK1.9之前:char[]value JDK1.9之后:byte[]value 3,String类的对象不可 ...

  10. Java基础知识强化30:String类之String的特点(String为什么是final)

    1. String字符串特点: 一旦被赋值,字符串值就不能改变. 这里String是final修饰的,具有不可继承性. 2. 为什么String是final? 主要是为了"效率"  ...

随机推荐

  1. Cookie技术

    u  常用的API 创建Cookie对象 Cookie(String name, String value)    ->以指定数据创建Cookie对象 设置Cookie对象 void setMa ...

  2. PHP Token(令牌)设计应用

    转自:http://my.oschina.net/u/912810/blog/358973 <?php class GEncrypt { protected static function ke ...

  3. java web 解决Form表单乱码问题

    JSP和Servlet的六种中文乱码处理方法 一.表单提交时出现乱码: 在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式. ...

  4. dll中使用exe中的变量

    注意:输出目录为:Result共享目录 1.exe项目: // EXE.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h" extern" ...

  5. Javascript中的对象和原型(二)(转载)

    上一篇中提到了JavaScript中对象的创建的一些基本操作,接下来讨论下继续讨论. 一 工厂模式 我们知道,要创建一个对象我们可以用如下代码: var user = new Object(); // ...

  6. UVA - 1218 Perfect Service(树形dp)

    题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...

  7. python爬虫解析库之re模块

    re模块 一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中, ...

  8. js鼠标触发事件集合

    转载自:http://blog.sina.com.cn/s/blog_627002d101010yb7.html 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ...

  9. C语言 · 约数个数

    算法提高 约数个数   时间限制:1.0s   内存限制:512.0MB      输入一个正整数N,输出其约数的个数. 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,1 ...

  10. [I2C]pca9555应用层测试代码

    注意点: 如果在设置I2C_SLAVE的时候,提示device_busy,可以使用I2C_SLAVE_FORCE, 在驱动里面二者对应同一个case语句 应用层可以调用接口:i2c_smbus_wri ...