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. mybatis实战教程(mybatis in action)之四:实现关联数据的查询

    有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如最常见到的多对一,一对多等.这些查询是如何处理的呢,这一讲就讲这个问题.我们首先创建一个Article 这个表 ...

  2. Android4.0源码Launcher启动流程分析【android源码Launcher系列一】

    最近研究ICS4.0的Launcher,发现4.0和2.3有稍微点区别,但是区别不是特别大,所以我就先整理一下Launcher启动的大致流程. Launcher其实是贯彻于手机的整个系统的,时时刻刻都 ...

  3. python笔记-列表和元组

    列表和元组: -可以将列表和元组当成普通的数组 -列表和元组可以保存任意类型的python对象 -通过从0开始的数字索引访问元素 -列表和元组可以存储不同类型的对象 列表和元组的区别: -列表元素使用 ...

  4. 用户 'NT AUTHORITY\IUSR' 登录失败

    今天在用VS20012发布XAF ASP.NET的程序时,在iis 调用SQLSERVER Express2008数据库时,总是出现错误“用户 'NT AUTHORITY\IUSR' 登录失败”,后来 ...

  5. ORC 资料Mark

    1 OCR开源代码网址汇总  1.1 OCRE(OCR Easy), http://lem.eui.upm.es/ocre.html 1.2 Clara OCR,http://directory.fs ...

  6. 列表的append方法和extend方法

    1.举例说明列表的append方法和extend l = ["zhy",666] l.extend(["edit","sdd"]) prin ...

  7. java开发常用到的jar包总结

    commons-io.jar: FileUtils 读取文件所有行 File file = new File("c:\\123.txt"); List<String> ...

  8. spring boot test中mockito的运用

    mock的意义 在微服务盛行的当下,开发过程中往往出现A应用中某功能的实现需要调用B应用的接口,无论使用RPC还是restful都需要B应用提供接口的实现整个开发工作才能继续进行.从而导致A应用的开发 ...

  9. Rust 1.7.0 处理命令行參数

    std是 Rust 标准函数库: env 模块提供了处理环境函数. 在使用标准函数库的时候,使用 use 导入对应的 module . 一.直接输出 use std::env; fn main(){ ...

  10. quick cocos2d-x 2.2.4 window环境调试

    BabeLua简介 BabeLua是一款基于VS2012/2013(简称VS)的免费开源的Lua集成开发环境,在Lua编辑和调试方面,具有如下功能和特性: ●Lua语法高亮 ●语法检查 ●自动补全 ● ...