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. OFBiz:component-load.xml

    component-load.xml定义了OFBiz的组件载入位置,默认的是通过目录来设置: <component-loader xmlns:xsi="http://www.w3.or ...

  2. Cordova 快速入门记录

    本篇文章由:http://xinpure.com/cordova-quick-start-recording/ 记一笔 Cordova 官网入门文档 Get Started Fast,言简意该.通俗易 ...

  3. Using AutoFac

    第一次整理了下关于autofac的一些具体的用法 1. 安装 Autofac: Install-Package Autofac -Version 4.8.1 2. 创建两个类库项目,IService ...

  4. C# 基础: new 和 overrider 的区别

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. mysql date and time type ---- mysql 时间&日期 类型详解

    mysql 中支持用多种方式来表示时间与日期 一.mysql 中能表示时间与日期的数据类型: 1.表示年 ) -- 最好不要用这个数据类型.对于年份的取值中有[1901 --> 2155] + ...

  6. Object-C中的字符串对象2-可变字符串

    // // main.m // 字符串-可变字符串 // // Created by zhangqs008 on 14-2-13. // Copyright (c) 2014年 zhangqs008. ...

  7. IOS基于XMPP协议开发--XMPPFramewok框架(二):服务器连接

    连接服务器前需准备事项: 1.搭建好XMPP服务器 2.设置服务器地址和端口 [_xmppStream setHostName:@"127.0.0.1"]; [_xmppStrea ...

  8. CentOS 6.2修改主机名

    写在前面的话:因为服务器要统一主机名,但是在安装的时候忘记设置了,所以需要修改主机名   需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会 ...

  9. 解决:Scanner输入数字总是莫名其妙多个0

    用BufferedInputStream解决 Scanner scanner = new Scanner(new BufferedInputStream(System.in)); System.out ...

  10. FreeRTOSConfig 配置文件详解

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 的配置文件 FreeRTOSConfig.h 中每个选项的作用.初学的话 ...