自学内容网 自学内容网

C#中的字符串

String

在实例方法中string虽然传入的是引用类型  但是修改string  并不是修改原来堆里面的值  而是又重新创建一个堆值  用来然后用方法内的变量指向新的堆值

C# 中的字符串(string 类型)提供了许多有用的方法来处理字符串数据。以下是一些常用的字符串方法:

  1. 连接和拼接

    • Concat(string str0, string str1, ... , string str32):连接多个字符串。

    • Concat(IEnumerable<string> strings):连接字符串集合。

    • Format(IFormatProvider provider, string format, params object[] args):格式化字符串。

  2. 比较

    • Compare(string strA, string strB):比较两个字符串。

    • CompareOrdinal(string strA, string strB):使用字符串的原始顺序比较两个字符串。

    • Equals(string str):判断当前字符串是否与另一个字符串相等。

    • Equals(string strA, string strB):判断两个字符串是否相等。

  3. 大小写转换

    • ToLower():将字符串转换为小写。

    • ToLowerInvariant():使用文化不敏感的方式将字符串转换为小写。

    • ToUpper():将字符串转换为大写。

    • ToUpperInvariant():使用文化不敏感的方式将字符串转换为大写。

  4. 查找和搜索

    • Contains(string value):判断字符串是否包含指定的子字符串。

    • EndsWith(string value):判断字符串是否以指定的子字符串结束。

    • IndexOf(string value):返回子字符串在字符串中首次出现的索引。

    • IndexOfAny(char[] anyOf):返回任何字符在字符串中首次出现的索引。

    • LastIndexOf(string value):返回子字符串在字符串中最后一次出现的索引。

    • StartsWith(string value):判断字符串是否以指定的子字符串开始。

  5. 替换和移除

    • Replace(string oldValue, string newValue):替换字符串中的字符或子字符串。

    • Remove(int startIndex):移除从指定位置开始的子字符串。

    • Remove(int startIndex, int count):移除从指定位置开始的指定数量的字符。

  6. 拆分和分割

    • Split(params char[] separator):使用指定的字符数组作为分隔符来拆分字符串。

    • Split(params string[] separator):使用指定的字符串数组作为分隔符来拆分字符串。

  7. 修剪和删除

    • Trim():删除字符串两端的空白字符。

    • Trim(char[] trimChars):删除字符串两端的指定字符。

  8. 插入

    • Insert(int startIndex, string value):在字符串的指定位置插入一个子字符串。

  9. 长度和大小

    • Length:获取字符串的长度。

  10. 子字符串

    • Substring(int startIndex):返回从指定位置开始的子字符串。

    • Substring(int startIndex, int length):返回从指定位置开始的指定长度的子字符串。

  11. 复制和复制到字符数组

    • Copy():创建字符串的副本。

    • CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count):将字符串的一部分复制到字符数组。

StringBuilder

StringBuilder 是 C# 中的一个类,用于高效地创建和修改可变字符串。它特别适用于在循环或频繁修改字符串的场景中,因为它避免了每次修改字符串时创建新的字符串对象的开销。以下是 StringBuilder 类的一些常用方法:

  1. 构造函数

    • StringBuilder():创建一个空的 StringBuilder 对象。

    • StringBuilder(int capacity):创建一个具有指定初始容量的 StringBuilder 对象。

    • StringBuilder(string value):创建一个 StringBuilder 对象,并用指定的字符串初始化。

    • StringBuilder(string value, int capacity):创建一个 StringBuilder 对象,并用指定的字符串和容量初始化。

  2. 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 的末尾。

  3. AppendLine 方法

    • AppendLine():追加一个环境特定的行终止符(通常是 "\r\n")。

    • AppendLine(string value):追加一个字符串和一个行终止符。

  4. Insert 方法

    • Insert(int index, string value):在 StringBuilder 的指定位置插入一个字符串。

  5. Remove 方法

    • Remove(int startIndex, int length):移除 StringBuilder 中从 startIndex 开始的 length 个字符。

  6. Replace 方法

    • Replace(char oldChar, char newChar):将 StringBuilder 中所有旧字符替换为新字符。

    • Replace(string oldValue, string newValue):将 StringBuilder 中所有旧字符串替换为新字符串。

  7. Clear 方法

    • Clear():移除 StringBuilder 中的所有内容。

  8. Capacity 属性

    • Capacity:获取或设置 StringBuilder 的最大容量。

  9. Length 属性

    • Length:获取 StringBuilder 当前包含的字符数。

  10. ToString 方法

    • ToString():返回 StringBuilder 当前内容的字符串表示形式。

  11. MaxCapacity 属性

    • MaxCapacity:获取 StringBuilder 的最大容量限制。

值类型(value types)和引用类型(reference types)在方法调用时的不同

在C#中,值类型(value types)和引用类型(reference types)在方法调用时的传入方式有所不同,这会影响到栈(stack)的使用情况。

  1. 值类型

    • 当值类型作为参数传递给方法时,它们是通过值传递(pass by value)的。这意味着值类型的数据会被复制到调用者方法的栈上,然后传递给被调用的方法。

    • 被调用方法接收到的是原始值类型的一个副本,因此对参数的修改不会影响到原始数据。

  2. 引用类型

    • 引用类型作为参数传递给方法时,是通过引用传递(pass by reference)的。这并不是说整个对象被复制到栈上,而是对象的引用(即内存地址)被复制到栈上。

    • 被调用方法接收到的是原始对象的引用,因此对参数的修改会影响到原始对象。

具体到栈的变化,以下是值类型和引用类型传入方法时栈的变化情况:

  • 值类型

    1. 调用方法时,值类型的数据被复制到调用者方法的栈上。

    2. 栈上为每个参数分配空间,并将值类型数据复制到这些空间中。

    3. 当方法调用完成,这些栈上的空间会被释放。

  • 引用类型

    1. 调用方法时,引用类型的引用(内存地址)被复制到调用者方法的栈上。

    2. 栈上为每个参数分配空间,并将引用类型的引用复制到这些空间中。

    3. 当方法调用完成,这些栈上的空间也会被释放,但它们只是引用的复制,不影响原始对象。

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)!