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
}
}
原文地址:https://blog.csdn.net/weixin_64532720/article/details/140674505
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!