.NET基础加强第四课--字符串操作和弱引用
创始人
2025-05-30 05:05:34
0

.NET基础加强第四课--字符串操作和弱引用

  • 字符串不可变性
    • 字符串池
    • 注意:
    • 字符串格式化
    • 忽略大小写
    • 截取字符串
    • StringBuilder
    • 弱引用

字符串不可变性

字符串一旦被 创建就不能被 修改

举例:
string s1 = “Hello World!”;
var s2 = s1.ToUpper();

Console.WriteLine(s1);
Console.WriteLine(s2);
Console.ReadKey();

字符串池

string s1 = “abcd”;
string s2 = “a” + “b” + “c” + “d”;

Console.WriteLine(Object.ReferenceEquals(s1,s2));
Console.ReadKey();

运行效

s1 字符串常量加到字符串池中,
“a”,”b”,”c”,”d” 字符常量来取时,先到字符串池中取
发现有时,就直接从池中取。所以 s1,s2 是相同的对象

变量增加到字符串池
string s1 = “a”;
string s2 = “b”;
string s3 = s1 + s2;

string.Intern(s1);
string.IsInterned(s2);
Console.ReadKey();

注意:

为什么字符串类前要加sealed关键字
1, 子类如果继承字符串类以后可能会对字符串类进行修改,可能 会改变字符串的特性
2, CLR对字符串提供了各种特殊的操作方式,如果有很多类继承了字符串类,则CLR需要
对更多的类型提供特殊操作,这样可能会降低性能

字符串格式化

//{ 0,[,number]}[:格式]
//[,number] 表示 宽度 + 对齐 , 正整数表示右对齐,负整数表示左对齐
// 不要货币符号
Console.WriteLine(“===姓名:{0,-10},薪资{1,20:f2}=”,“zs”,800.1234);

Console.ReadKey();

忽略大小写

//StringComparison.OrdinalIgnoreCase

// char 转字符串
char[] chs = new char[] { ‘a’, ‘b’, ‘c’ };
string s = new string(chs);
Console.WriteLine(s);

截取字符串

string msgs = “abcdef hello”;
msgs = msgs.Substring(7,5);
Console.WriteLine(msgs);

Console.ReadKey();

练习:得到文件名
string path = @“D:\BaiduNetdiskDownload\filename.txt”;

path = path.Substring(path.LastIndexOf(@“”) + 1);
Console.WriteLine(path);

Console.ReadKey();

得到字符串中的IP,port
string mes = “192.168.11.233[port=21,type=ftp]”;
string[] parts = mes.Split(new string[] {
“[port=”,“,type=”,“]”},StringSplitOptions.RemoveEmptyEntries);

Console.WriteLine(“IP:{0}”,parts[0]);
Console.WriteLine(“port:{0}”, parts[1]);
Console.WriteLine(“server:{0}”,parts.Length>2?parts[2]:“”);

Console.ReadKey();

string[] lines = File.ReadAllLines(@“D:\size.txt”, Encoding.Default);
string msg = string.Empty;
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < lines.Length; i++)
{
msg = msg + lines[i];
}
watch.Stop();
Console.WriteLine(watch.Elapsed);
Console.WriteLine(“ok”);
Console.ReadKey();

StringBuilder

string[] lines = File.ReadAllLines(@“D:\size.txt”, Encoding.Default);
StringBuilder stringBuilder = new StringBuilder();
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < lines.Length; i++)
{
stringBuilder.Append(lines[i]);
}
watch.Stop();
Console.WriteLine(watch.Elapsed);
Console.WriteLine(“ok”);

Console.ReadKey();

弱引用

Person p = new Person();
WeakReference wr = new WeakReference§;

Console.WriteLine(“开始”);

p = null;

Console.WriteLine(“引用中。。。”);

重新使用p对象
//if (wr.IsAlive)
//{
// object o = wr.Target;
// if (o != null)
// {
// Person p1 = o as Person;
// // 就可以使用Person 对象了, 这个对象还是之前的对象
// }
//}

object o = wr.Target;
if (o != null)
{
Person p1 = o as Person;
// 就可以使用Person 对象了, 这个对象还是之前的对象
p1.Name = “张三”;
p = p1;
}

Console.WriteLine(“执行完成了”);
Console.WriteLine(p.Name);

Console.ReadKey();

public class Person
{
public int Id { get; set; }
public string Name { get; set; }

}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...