C#用StringBuilder高效处理字符串

目录

一、背景

二、使用StringBuilder便捷、高效地操作字符串

三、实例

1.源码

2.生成效果

四、实例中知识点

1.StringBuilder类


一、背景

        符串是不可改变的对象,字符串在创建以后,就不会被改变,当使用字符串对象的Replace、split或Remove等方法操作字符串时,实际上是产生了一个新的字符串对象,原有的字符串如果没有被引用,将会被垃圾收集器回收。如果频繁地使用字符串中的方法对字符串进行操作,会产生大量的没有被引用的字符串对象,这会增加垃圾收集的压力,造成系统资源的浪费。

二、使用StringBuilder便捷、高效地操作字符串

        因为使用StringBuilder操作字符串不会产生新的字符串对象,在使用StringBuilder对象前首先要引用命名空间System.Text。

        由于字符串的不可变性,使用StringBuilder操作字符串无疑是非常方便和有效的方法。StringBuilder对象的使用方法:

StringBuilder P_stringbuilder = new StringBuilder("abc");  //使用new关键字调用构造方法创建对象
P_stringbuilder.Insert(2,Environment.NewLine);             //调用对象的Insert方法向字符串中插入字符

        建立StringBuilder对象后,可以调用操作字符串的方法,从而方便操作字符串对象适当地使用StringBuilder操作字符串,会使程序运行更加高效。

三、实例

1.源码

//按标点符号对字符串分行显示
using System.Text;

namespace _039
{
    public partial class Form1 : Form
    {
        private GroupBox? groupBox1;
        private TextBox? textBox3;
        private Button? button1;
        private TextBox? textBox1;
        private TextBox? textBox2;

        public Form1()
        {
            InitializeComponent();
            Load += Form1_Load;
        }
        private void Form1_Load(object? sender, EventArgs e)
        {
            // 
            // textBox3
            // 
            textBox3 = new TextBox
            {
                Location = new Point(12, 22),
                Multiline = true,
                Name = "textBox3",
                Size = new Size(310, 46),
                TabIndex = 6,
                Text = "在下面文本框中输入字符串,并使用(,)号分隔,点击分行显示按钮,根据(,)号对字符串进行分行。"
            };
            // 
            // button1
            //      
            button1 = new Button
            {
                Location = new Point(130, 170),
                Name = "button1",
                Size = new Size(75, 23),
                TabIndex = 3,
                Text = "分行显示",
                UseVisualStyleBackColor = true
            };
            button1.Click += Button1_Click;
            // 
            // textBox1
            //            
            textBox1 = new TextBox
            {
                Location = new Point(12, 80),
                Multiline = true,
                Name = "textBox1",
                Size = new Size(310, 84),
                TabIndex = 4
            };
            // 
            // textBox2
            //            
            textBox2 = new TextBox
            {
                Location = new Point(12, 200),
                Multiline = true,
                Name = "textBox2",
                Size = new Size(310, 84),
                TabIndex = 5
            };
            // 
            // groupBox1
            //            
            groupBox1 = new GroupBox
            {
                Location = new Point(0, 0),
                Name = "groupBox1",
                Size = new Size(334, 74),
                TabIndex = 0,
                TabStop = false,
                Text = "操作说明:"
            };
            groupBox1.Controls.Add(textBox3);
            groupBox1.SuspendLayout();
         
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(334, 296);
            Controls.Add(textBox2);
            Controls.Add(textBox1);
            Controls.Add(button1);
            Controls.Add(groupBox1);
            Name = "Form1";
            StartPosition = FormStartPosition.CenterScreen;
            Text = "按标点符号对字符串分行";
            groupBox1.ResumeLayout(false);
            groupBox1.PerformLayout();
        }

        private void Button1_Click(object? sender, EventArgs e)
        {
            StringBuilder stringbuilder = new(textBox1!.Text);      //创建字符串处理对象
            for (int i = 0; i < stringbuilder.Length; i++)
                if (stringbuilder[i] == ',')                       //判断是否出现(,)号
                    stringbuilder.Insert(++i, Environment.NewLine); //向字符串内添加换行符
            textBox2!.Text = stringbuilder.ToString();              //得到分行后的字符串
        }
    }
}

2.生成效果

 

四、实例中知识点

1.StringBuilder类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/292189.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flappy Bird QDN PyTorch博客 - 代码解读

Flappy Bird QDN PyTorch博客 - 代码解读 介绍环境配置项目目录结构QDN算法重要函数解读preprocess(observation)DeepNetWork(nn.Module)BirdDQN类主程序部分 介绍 在本博客中&#xff0c;我们将介绍如何使用QDN&#xff08;Quantile Dueling Network&#xff09;算法&#xf…

RK3399平台入门到精通系列讲解(实验篇)信号驱动 IO 实验

🚀返回总目录 文章目录 一、什么是信号驱动IO1.1、信号驱动IO1.2、fcntl 函数介绍二、信号驱动 IO 实验源码2.1、Makefile2.2、驱动部分代码2.3、测试应用代码一、什么是信号驱动IO 1.1、信号驱动IO 信号驱动 IO 不需要应用程序查询设备的状态,一旦设备准备就绪,会触发 SI…

ASP.NETCore WebAPI 入门 杨中科

ASP.NETCore WebAPI入门1 回顾 mvc开发模式 前端代码和后端代码是混在一个项目之中 WEB API 1、什么是结构化的Http接口。Json。 2、Web API项目的搭建。 3、Web API项目没有Views文件夹。 4、运行项目&#xff0c;解读代码结构。 5、【启用OpenAPI支持】→>swagger,在界…

视频文字想要提取应该使用哪些软件呢

随着短视频的兴起&#xff0c;快手成为了很多人喜爱的平台。有时候&#xff0c;我们看到一些有趣的视频&#xff0c;想要提取其中的文字内容&#xff0c;却不知道该如何操作。今天&#xff0c;我们就来介绍一种使用水印云快手提取视频文字的方法。 首先&#xff0c;我们需要下…

Java Review - Spring BeanUtils 踩坑记

文章目录 概述Spring BeanUtils基本使用Code忽略了属性类型导致拷贝失败同一字段在不同的类中定义的类型不一致同一个字段分别使用包装类和基本类型且没有传递实际值布尔类型的属性分别使用了基本类型和包装类型且属性名使用is开头 null值覆盖导致数据异常内部类数据无法成功拷…

根本记不住MySQL进阶查询语句

1 MySQL进阶查询 1.1 MySQL进阶查询的语句 全文以数据库location和Store_Info为实例 ---- SELECT ----显示表格中一个或数个字段的所有数据记录 语法&#xff1a;SELECT "字段" FROM "表名"; select 列名 from 表名 ; ---- DISTINCT ----不显示重复的数…

使用KVM命令集管理虚拟机

14.2.1案例分析 案例环境使用一台物理机器&#xff0c;一台服务器安装CentOS7.3的64位系统&#xff08;即node01&#xff09;&#xff0c;rhel7.1是在宿主机node01中安装的虚拟机。 14.2.2案例实施 1.安装Linux虚拟机 安装过程同上一案例&#xff0c;使用Xshell 远程控制node0…

视频号上怎么开店带货?门槛和注意事项,如下所示

我是王路飞。 视频号上现在也可以开店带货了&#xff08;严格来说从22年就可以了&#xff09;。 我们团队是在22年9月份开始入局视频号电商这个赛道的&#xff0c;在此之前是专注于抖店&#xff0c;目前两个项目都在做。 今天不聊抖店&#xff0c;主要说下视频号上开店带货的…

Win10电脑关闭OneDrive自动同步的方法

在Win10电脑操作过程中&#xff0c;用户想要关闭OneDrive的自动同步功能&#xff0c;但不知道具体要怎么操作&#xff1f;首先用户需要打开OneDrive&#xff0c;然后点击关闭默认情况下将文档保存到OneDrive选项保存&#xff0c;最后关闭在这台电脑上同步设置保存就好了。接下来…

Flink 维表关联方案

Flink 维表关联方案 1、Flink DataStream 关联维表 1&#xff09;概述 1.分类 实时数据库查找关联&#xff08;Per-Record Reference Data Lookup&#xff09; 预加载维表关联&#xff08;Pre-Loading of Reference Data&#xff09; 维表变更日志关联&#xff08;Refere…

微信小程序+前后端开发学习材料

目录结构 全局文件 1.app.json 文件 用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。文件内容为一个 JSON 对象。 1.1 page用于指定小程序由哪些页面组成&#xff0c;每一项都对应一个页面的 路径&#xff08;含文…

【数值分析】Hermite插值

4. Hermite插值 理论和应用中提出的某些插值问题&#xff0c;要求插值函数 p ( x ) {p(x)} p(x) 具有一定的光滑度&#xff0c;即在插值节点处满足一定的导数条件&#xff0c;这类插值问题称为Hermite插值问题。题目大多以三次Hermite插值为主。三次Hermite插值需要四个条件&…

Leetcode的AC指南 —— 字符串/卡码网:55. 右旋字符串

摘要&#xff1a; Leetcode的AC指南 —— 字符串/卡码网&#xff1a;55. 右旋字符串。题目介绍&#xff1a;字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k&#xff0c;请编写一个函数&#xff0c;将字符串中的后面 k 个字…

grep笔记240103

常用选项&#xff1a;&#xff1a; -i&#xff1a;忽略大小写进行匹配。 -v&#xff1a;反向匹配&#xff0c;只打印不匹配的行。 -n&#xff1a;显示匹配行的行号。 -r&#xff1a;递归查找子目录中的文件。 -l&#xff1a;只打印匹配的文件名。 -c&#xff1a;只打印匹配的行…

整理的6个Linux运维脚本

整理的6个Linux运维脚本 1、统计/etc/passwd 中能登录的用户&#xff0c;并将对应在/etc/shadow 中第二列密码提取2、查看当前连接到本机的远程IP地址3、检测本机当前用户是否为超级管理员&#xff08;root&#xff09;4、检查指定目录下是否存在对应文件5、查找 Linux 系统中的…

QT_02 窗口属性、信号槽机制

QT - 窗口属性、信号槽机制 1. 设置窗口属性 窗口设置 1,标题 2,大小 3,固定大小 4,设置图标在 widget.cpp 文件中&#xff1a; //设置窗口大小,此时窗口是可以拉大拉小的 //1参:宽度 //2参:高度 this->resize(800, 600); //设置窗口标题 this->setWindowTitle("…

使用 Palantir 表征单细胞数据中的细胞状态概率

使用 Palantir 表征单细胞数据中的细胞状态概率 写在前面的概览正文内容摘要Introduction结果马尔可夫过程The Palantir algorithm早期人类造血的景观Palantir 概括了预期的造血趋势与轨迹推理算法的比较 讨论 学习文献 写在前面的概览 Palantir算法主要用于模拟细胞分化的轨迹…

Redis缓存穿透,缓存击穿,缓存雪崩

文章目录 Redis缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩1. 缓存穿透1.1 解决方案1&#xff1a;缓存空数据1.2 解决方案2&#xff1a;使用布隆过滤器1.2.1 布隆过滤器介绍 2. 缓存击穿2.1 解决方案1&#xff1a;互斥锁2.2 解决方案2&#xff1a;逻辑过期 3. 缓存雪崩3…

交易逆序对的总数

题目链接 交易逆序对的总数 题目描述 注意点 0 < record.length < 50000 解答思路 本题是归并排序的扩展&#xff0c;可以先进入手撕归并排序了解利用归并排序进行合并时&#xff0c;对于左侧区间当前的首个元素leftNum&#xff0c;不论右侧区间当前的首个元素right…

【智慧地球】星图地球 | 星图地球超算数据工场

当前空天信息处理涉及并发并行的大量计算问题&#xff0c;需要高性能计算、智能计算联合调度&#xff0c;以此来实现多算力融合&#xff1b;而我国算力产业规模快速增长&#xff0c;超算算力资源正需要以任务驱动来统筹。 基于此&#xff0c;中科星图与郑州中心展开紧密合作&a…