C#中的字符串
String
在实例方法中string虽然传入的是引用类型 但是修改string 并不是修改原来堆里面的值 而是又重新创建一个堆值 用来然后用方法内的变量指向新的堆值
C# 中的字符串(string 类型)提供了许多有用的方法来处理字符串数据。以下是一些常用的字符串方法:
-
连接和拼接:
-
Concat(string str0, string str1, ... , string str32):连接多个字符串。 -
Concat(IEnumerable<string> strings):连接字符串集合。 -
Format(IFormatProvider provider, string format, params object[] args):格式化字符串。
-
-
比较:
-
Compare(string strA, string strB):比较两个字符串。 -
CompareOrdinal(string strA, string strB):使用字符串的原始顺序比较两个字符串。 -
Equals(string str):判断当前字符串是否与另一个字符串相等。 -
Equals(string strA, string strB):判断两个字符串是否相等。
-
-
大小写转换:
-
ToLower():将字符串转换为小写。 -
ToLowerInvariant():使用文化不敏感的方式将字符串转换为小写。 -
ToUpper():将字符串转换为大写。 -
ToUpperInvariant():使用文化不敏感的方式将字符串转换为大写。
-
-
查找和搜索:
-
Contains(string value):判断字符串是否包含指定的子字符串。 -
EndsWith(string value):判断字符串是否以指定的子字符串结束。 -
IndexOf(string value):返回子字符串在字符串中首次出现的索引。 -
IndexOfAny(char[] anyOf):返回任何字符在字符串中首次出现的索引。 -
LastIndexOf(string value):返回子字符串在字符串中最后一次出现的索引。 -
StartsWith(string value):判断字符串是否以指定的子字符串开始。
-
-
替换和移除:
-
Replace(string oldValue, string newValue):替换字符串中的字符或子字符串。 -
Remove(int startIndex):移除从指定位置开始的子字符串。 -
Remove(int startIndex, int count):移除从指定位置开始的指定数量的字符。
-
-
拆分和分割:
-
Split(params char[] separator):使用指定的字符数组作为分隔符来拆分字符串。 -
Split(params string[] separator):使用指定的字符串数组作为分隔符来拆分字符串。
-
-
修剪和删除:
-
Trim():删除字符串两端的空白字符。 -
Trim(char[] trimChars):删除字符串两端的指定字符。
-
-
插入:
-
Insert(int startIndex, string value):在字符串的指定位置插入一个子字符串。
-
-
长度和大小:
-
Length:获取字符串的长度。
-
-
子字符串:
-
Substring(int startIndex):返回从指定位置开始的子字符串。 -
Substring(int startIndex, int length):返回从指定位置开始的指定长度的子字符串。
-
-
复制和复制到字符数组:
-
Copy():创建字符串的副本。 -
CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count):将字符串的一部分复制到字符数组。
-
StringBuilder
StringBuilder 是 C# 中的一个类,用于高效地创建和修改可变字符串。它特别适用于在循环或频繁修改字符串的场景中,因为它避免了每次修改字符串时创建新的字符串对象的开销。以下是 StringBuilder 类的一些常用方法:
-
构造函数:
-
StringBuilder():创建一个空的StringBuilder对象。 -
StringBuilder(int capacity):创建一个具有指定初始容量的StringBuilder对象。 -
StringBuilder(string value):创建一个StringBuilder对象,并用指定的字符串初始化。 -
StringBuilder(string value, int capacity):创建一个StringBuilder对象,并用指定的字符串和容量初始化。
-
-
Append 方法:
-
Append(string value):将字符串追加到StringBuilder的末尾。 -
Append(char value):将单个字符追加到StringBuilder的末尾。 -
Append(char[] value):将字符数组追加到StringBuilder的末尾。 -
Append(bool value):将布尔值作为字符串追加到StringBuilder的末尾。 -
Append(int value):将整数值作为字符串追加到StringBuilder的末尾。 -
Append(uint value):将无符号整数值作为字符串追加到StringBuilder的末尾。 -
Append(long value):将长整数值作为字符串追加到StringBuilder的末尾。 -
Append(ulong value):将无符号长整数值作为字符串追加到StringBuilder的末尾。 -
Append(float value):将浮点数值作为字符串追加到StringBuilder的末尾。 -
Append(double value):将双精度浮点数值作为字符串追加到StringBuilder的末尾。 -
Append(decimal value):将十进制数值作为字符串追加到StringBuilder的末尾。 -
Append(object value):将对象的字符串表示形式追加到StringBuilder的末尾。
-
-
AppendLine 方法:
-
AppendLine():追加一个环境特定的行终止符(通常是"\r\n")。 -
AppendLine(string value):追加一个字符串和一个行终止符。
-
-
Insert 方法:
-
Insert(int index, string value):在StringBuilder的指定位置插入一个字符串。
-
-
Remove 方法:
-
Remove(int startIndex, int length):移除StringBuilder中从startIndex开始的length个字符。
-
-
Replace 方法:
-
Replace(char oldChar, char newChar):将StringBuilder中所有旧字符替换为新字符。 -
Replace(string oldValue, string newValue):将StringBuilder中所有旧字符串替换为新字符串。
-
-
Clear 方法:
-
Clear():移除StringBuilder中的所有内容。
-
-
Capacity 属性:
-
Capacity:获取或设置StringBuilder的最大容量。
-
-
Length 属性:
-
Length:获取StringBuilder当前包含的字符数。
-
-
ToString 方法:
-
ToString():返回StringBuilder当前内容的字符串表示形式。
-
-
MaxCapacity 属性:
-
MaxCapacity:获取StringBuilder的最大容量限制。
-
值类型(value types)和引用类型(reference types)在方法调用时的不同
在C#中,值类型(value types)和引用类型(reference types)在方法调用时的传入方式有所不同,这会影响到栈(stack)的使用情况。
-
值类型:
-
当值类型作为参数传递给方法时,它们是通过值传递(pass by value)的。这意味着值类型的数据会被复制到调用者方法的栈上,然后传递给被调用的方法。
-
被调用方法接收到的是原始值类型的一个副本,因此对参数的修改不会影响到原始数据。
-
-
引用类型:
-
引用类型作为参数传递给方法时,是通过引用传递(pass by reference)的。这并不是说整个对象被复制到栈上,而是对象的引用(即内存地址)被复制到栈上。
-
被调用方法接收到的是原始对象的引用,因此对参数的修改会影响到原始对象。
-
具体到栈的变化,以下是值类型和引用类型传入方法时栈的变化情况:
-
值类型:
-
调用方法时,值类型的数据被复制到调用者方法的栈上。
-
栈上为每个参数分配空间,并将值类型数据复制到这些空间中。
-
当方法调用完成,这些栈上的空间会被释放。
-
-
引用类型:
-
调用方法时,引用类型的引用(内存地址)被复制到调用者方法的栈上。
-
栈上为每个参数分配空间,并将引用类型的引用复制到这些空间中。
-
当方法调用完成,这些栈上的空间也会被释放,但它们只是引用的复制,不影响原始对象。
-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _7._24day
{
internal class Program
{
static void Main(string[] args)
{
/* 作业:
作业1:字符串反序输出,如:hello ===> olleh
作业2:将“hello you world”反向输出“world you hello”
作业3:Email中提取用户名和域名,如:ddy_dhj@163.com 用户名:ddy_dhj 域名:www.163.com
作业4:字符串某个子串所在位置,如:hello,查ll在字符串中的位置。多种方式实现。提示:for, indexof
作业5:用户输入的字符串中有多少大写字母、小写字母、数字、其他字符的个数。如:hello, h:1, e:1, l:2, o:1
作业6:让用户输入一句话判断有没有邪恶两个字,有的话用 * *替换。如:老赵是个邪恶的人 ==》老赵是个 * *的人
作业7:把{“诸葛亮”,“鸟叔”,“卡哇伊”}字符串数组,变成使用 | 连接的字符串,如:诸葛亮|鸟叔|卡哇伊
作业8:输入一个网址,判断顶级域名是什么类型,com为商业网站,net为网络服务机构网站,org为非营利组织网站,
gov为政府网站,edu为教育网站;如:用户输入https://www.baidu.com,提示:顶级域名为:.com,这是一个商业网站*/
string s1 = "hello";
Stringinversion(s1);
string s2 = "hello you world";
Reverseoutput(s2);
string s3 = "ddy_dhj@163.com";
Withdraw(s3);
string s4 = "hello";
int res1 = Position(s4);
Console.WriteLine(res1);
string s5 = "12345!!!!WWWWWLLLLLppppa";
Statistics(s5);
string s6 = "老赵是个邪恶的人";
Judgewhether(s6);
string s7 = "“诸葛亮”,“鸟叔”,“卡哇伊”";
Concatenatedstring(s7);
string s8 = "https://www.baidu.com";
Judgmentdomain(s8);
}
#region 1.字符串反转输出方法Stringinversion
static void Stringinversion(string s)
{
for (int i = s.Length - 1; i >= 0; i--)
{
Console.Write(s[i]);
}
Console.WriteLine();
}
#endregion
#region 2.反向输出
static void Reverseoutput(string s)
{
string[] words = s.Split(' ');
Array.Reverse(words);
foreach (var item in words)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
#endregion
#region 3.提取用户名和域名
static void Withdraw(string s)
{
string[] strings = s.Split('@');
Console.WriteLine("用户名:" + strings[0] + " 域名:" + strings[1]);
}
#endregion
#region 4.子串所在位置
static int Position(string s)
{
int x = s.IndexOf("ll");
return x;
}
#endregion
#region 5.多少大写字母、小写字母
static void Statistics(string s)
{
int capital = 0;
int lower = 0;
int digit = 0;
int anther = 0;
for (int i = 0; i < s.Length; i++)
{
if (char.IsUpper(s[i])) capital++;
else if (char.IsLower(s[i])) lower++;
else if (char.IsDigit(s[i])) digit++;
else anther++;
}
Console.WriteLine("大写字母:"+capital);
Console.WriteLine("小写字母:"+lower);
Console.WriteLine("数字:"+digit);
Console.WriteLine("其他字符的个数:" + anther);
}
#endregion
#region 6.有没有邪恶
static void Judgewhether(string s)
{
if (s.Contains("邪恶"))
{
string res = s.Replace("邪恶", "**");
Console.WriteLine(res);
}
}
#endregion
#region 7.连接的字符串
static void Concatenatedstring(string s)
{
string[] strings = s.Split(',');
for (int i = 0; i < strings.Length; i++)
{
string v1 = strings[i].Trim('“');
string v2 = v1.Trim('”');
if (i != strings.Length - 1)
{
Console.Write(v2 + "|");
}
else
{
Console.Write(v2);
}
}
Console.WriteLine();
}
#endregion
#region 8.判断顶级域名
static void Judgmentdomain(string s)
{
if (s.EndsWith(".com"))
{
Console.WriteLine("这是商业网站");
}
if (s.EndsWith(".net"))
{
Console.WriteLine("这是网络服务机构网站");
}
if (s.EndsWith(".org"))
{
Console.WriteLine("这是非营利组织网站");
}
if (s.EndsWith(".org"))
{
Console.WriteLine("这是政府网站");
}
if (s.EndsWith(".org"))
{
Console.WriteLine("这是教育网站");
}
}
#endregion
}
}
相关文章:
C#中的字符串
String 在实例方法中string虽然传入的是引用类型 但是修改string 并不是修改原来堆里面的值 而是又重新创建一个堆值 用来然后用方法内的变量指向新的堆值 C# 中的字符串(string 类型)提供了许多有用的方法来处理字符串数据。以下是一些常用的字符…...
docker安装部署elasticsearch7.15.2
docker安装部署elasticsearch7.15.2 1.拉取es镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2如果不想下载或者镜像拉去太慢可以直接下载文章上面的镜像压缩包 使用镜像解压命令 docker load -i elasticsearch-7-15-2.tar如下图所示就表示镜像解压成…...
Symfony 入门指南:快速安装与基础配置
Symfony 入门指南:快速安装与基础配置 Symfony 是一个强大而灵活的 PHP 框架,广泛应用于构建现代 Web 应用程序。本指南将带您一步一步地了解如何快速安装 Symfony,并完成基本配置,以便您能够开始使用这个强大的框架。 目录 引…...
3.3V升压至5V的AH6922芯片:高效能的SOP8封装解决方案
# 3.3V升压至5V的AH6922芯片:高效能的SOP8封装解决方案 在当今快速发展的电子设备领域,对于电源管理的需求日益增长。特别是对于便携式产品和手持设备,一个高效、稳定且体积小巧的升压解决方案变得至关重要。本文将介绍一款专为这些需求设计…...
赋能未来教育,3DCAT助力深圳鹏程技师学院打造5G+XR实训室
随着国家对教育行业的重视,实训室建设已成为推动教育现代化的关键。《教育信息化2.0行动计划》、《职业教育示范性虚拟仿真实训基地建设指南》等政策文件,明确指出了加强虚拟仿真实训教学环境建设的重要性。 在这一大背景下,教育行业对于实训…...
力扣141环形链表问题|快慢指针算法详细推理,判断链表是否有环|龟兔赛跑算法
做题链接 目录 前言: 一、算法推导: 1.假设有环并且一定会相遇,那么一定是在环内相遇,且是快指针追上慢指针。 2.有环就一定会相遇吗?快指针是每次跳两步,有没有可能把慢指针跳过去? 3.那一定…...
React 常见的报错及解决方法
1、Warning: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons(无效的钩子调用。钩子只能在函数组件的内部调用。这可能是由于以下原因之一) 原因&#x…...
更新服务器nginx 1.26.1版本
今天在官网下载了nginx1的1.26.1版本,使用gpt的脚本想直接覆盖安装,脚本如下 #!/bin/bash# 设置变量 NGINX_VERSION"1.26.1" TAR_FILE"nginx-$NGINX_VERSION.tar.gz" SRC_DIR"nginx-$NGINX_VERSION"# 检查是否存在tar包 …...
JAVA代码审计JAVA0基础学习(需要WEB基础知识)DAY2
JAVA 在 SQL执行当中 分为3种写法: JDBC注入分析 Mybatis注入分析 Hibernate注入分析 JDBC 模式不安全JAVA代码示例部分特征 定义了一个 sql 参数 直接让用户填入id的内容 一个最简单的SQL语句就被执行了 使用安全语句却并没有被执行 Mybatis: #…...
SpringBoot整合elasticsearch-java
一、依赖 系统使用的是ElasticSearch8.2.0 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.1.0</version> </dependency> 二、配置 1、yml文件配置 elastics…...
网络服务与应用
一、 文件传输 FTP 1、FTP采用典型的C/S架构(即服务器端和客户端模型),客户端与服务器端建立TCP连接之后即可实现文件的上传、下载。 2、FTP传输过程 1)、主动模式(POST):入站连接 2&#x…...
Git项目如何配置,如何上传至GitHub
Git项目配置并上传至GitHub的详细步骤如下: 一、准备工作 创建GitHub账号: 访问GitHub官网,点击“Sign up”注册新账号。填写相关信息,包括用户名、邮箱和密码,完成账号创建。安装Git客户端: 访问Git官网…...
Python教程(一):环境搭建及PyCharm安装
目录 引言1. Python简介1.1 编译型语言 VS 解释型语言 2. Python的独特之处3. Python应用全览4. Python版本及区别5. 环境搭建5.1 安装Python: 6. 开发工具(IDE)6.1 PyCharm安装教程6.2 永久使用教程 7. 编写第一个Hello World结语 引言 在当…...
神经网络与注意力机制的权重学习对比:公式探索
神经网络与注意力机制的权重学习对比:公式探索 注意力机制与神经网络权重学习的核心差异 在探讨神经网络与注意力机制的权重学习时,一个核心差异在于它们如何处理输入数据的权重。神经网络通常通过反向传播算法学习权重,而注意力机制则通过学…...
C语言------指针讲解(3)
一、字符指针 在指针中,我们知道有一类指针类型为字符指针char*; int main() {char ch w;char* pc &ch;*pc w;return 0; } 还有一种使用方式如下: 上述代码中,本质是把hello的首字符的地址放到了pstr中。即把一个常量字符串的首字符…...
博客建站 - 常用的公共DNS服务器
国内公共DNS服务 服务器名称首选DNS服务备用DNS服务114 DNS114.114.114.114114.114.115.115阿里 DNS223.5.5.5223.6.6.6腾讯云公共DNS119.29.29.29182.254.116.116百度公共DNS180.76.76.76110.242.68.68 国外公共DNS服务 服务器名称首选DNS服务备用DNS服务备注Google DNS8.8…...
用Redisson的RMap做一个简单的购物车示例
RMap是Redisson提供的一个高级数据结构,它封装了Redis中的Hash数据类型,提供了一个类似Java HashMap的接口。RMap非常适合在需要分布式共享的键值对集合场景中使用,以下是一些典型的应用场景: 分布式缓存: RMap可以用作…...
「12月·长沙」第四届机器人、自动化与智能控制国际会议(ICRAIC 2024)
随着科技的飞速发展,智能机器人在当今社会的重要性愈发凸显。从制造业的自动化生产线,到医疗领域的手术机器人,再到家庭生活中的智能助手,机器人与人工智能的融合正在改变着我们的生产和生活方式。第四届机器人、自动化与智能控制…...
传神社区|数据集合集第7期|法律NLP数据集合集
自从ChatGPT等大型语言模型(Large Language Model, LLM)出现以来,其类通用人工智能(AGI)能力引发了自然语言处理(NLP)领域的新一轮研究和应用浪潮。尤其是ChatGLM、LLaMA等普通开发者都能运行的…...
完美解决Ubuntu的MySQL临时文件夹修改调整
打开终端,输入以下命令 $ sudo -i # 切换root用户 $ systemctl stop mysql.service $ mkdir /home/tmp $ chown root:root /home/tmp $ chmod 1777 /home/tmp $ gedit /etc/mysql/mysql.conf.d/mysqld.cnf以上最后一条命令执行完后,在打开的mysqld.cnf文…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
