C#-字符串常用操作

文章目录

    • 字符串简介
    • 字符串的操作
      • 字符串的大小写转换
      • 字符串的比较
      • 字符串的格式化
      • 字符串的截取
      • 字符串的分割
      • 字符串的合并
      • 字符串的插入与填充
      • 字符串的删除
      • 字符串的修剪
      • 字符串的复制
      • 字符串的替换
      • 字符串的查找

字符串简介

字符串是由零个或多个字符组成的有限序列,是几乎所有编程语言中可以实现的非常重要和有用的数据类型。
字符串是“System. String”类的一个引用类型,但与其他引用类型不同的是,C#将字符串视为一个基本类型,可以声明为一个变量,并为其赋值。

  1. 字符集与字符编码
    在日常编写代码过程中,常常会碰到乱码问题,一个典型的情况是浏览网页,如果网站开发者缺少经验,就会带来这种令人头疼的问题。要了解乱码的症结,用户就得从字符集和字符编码说起。
    字符集:是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
    字符编码:是一套法则,最常规的理解就是:让程序根据这个法则对应到相应的字符集中将byte[]存取为string。
  2. 常用字符集合字符编码
    常见的字符集有ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集、UTF-8等。

字符串的操作

字符串的大小写转换

String提供了方便转换字符串中所有字符大小写的方法ToUpper和ToLower。这两个方法没有输入参数,使用也非常简单。
编写程序,将一个字符串进行大小写转换。

using System;
namespace Project1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "Study hard and get up every day.";
            Console.WriteLine("大写字符串:"+str.ToUpper());
            Console.WriteLine("小写字符串:"+str.ToLower());
            char mychar = 'a';
            Console.WriteLine("大写字符:"+char.ToUpper(mychar));
            Console.WriteLine("小写字符:"+char.ToLower(mychar));
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了字符串的大小写转换。在代码中首先定义一个字符串变量str,并为其赋值;然后使用ToUpper和ToLower方法,将字符串“Study hardand get up every day.”转换成大写和小写;接着,再定义字符变量mychar,并为其赋值一个字符a,也可以使用ToUpper和ToLower方法转换大小写。

大写字符串:STUDY HARD AND GET UP EVERY DAY.
小写字符串:study hard and get up every day.
大写字符:A
小写字符:a

字符串的比较

比较字符串是指按照字典排序规则,判定两个字符的相对大小,常用的比较字符串的方法包括Compare、CompareTo,以及Equals。

  1. Compare
    Compare方法是String类的静态方法,用于全面比较两个字符串对象。
    C#-字符串常用操作_第1张图片

编写程序,使用Compare方法比较两个字符串。

using System;
namespace Project2
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "Hello";
            string str2 = "Hi";
            string str3 = "HELLO";
            Console.WriteLine(string.Compare(str1, str2));
            Console.WriteLine(string.Compare(str1, str3, true));
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Compare方法的使用。在代码中,定义了三个字符串变量str1、str2和str3,并为str1赋值为“Hello”,为str2赋值为“Hi”,为str3赋值为“HELLO”。在执行语句“string.Compare(str1, str2)”时,会输出-1,说明str1小于str2,这是因为在计算机比较字符串的时候,会挨个比较单个字符,由于str1和str2的第一个字母相同,都是H,就会比较两个字符串的第二个字母e和i,因为在ASCII字符集中,e的ASCII值小于i的ASCII值,所以就会判断str1小于str2,输出-1值。
在执行“string.Compare(str1, str3, true)”时,会输出0,则说明两个字符串是相等的。这是因为添加了true,此时Compare方法就会忽略字符串str1和str2的大小写进行比较。

-1
0
  1. CompareTo
    CompareTo方法将当前字符串对象与另一个对象做比较,其作用与Compare类似,返回值也相同。CompareTo与Compare相比,区别在于:CompareTo不是静态方法,可以通过一个String对象调用;CompareTo没有重载形式,只能按照大小写敏感方式比较两个整串。
    C#-字符串常用操作_第2张图片

编写程序,使用CompareTo方法比较两个字符串。

using System;
namespace Project3
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "HELLO";
            string str2 = "Hello";
            Console.WriteLine(str1.CompareTo(str2));
            Console.ReadKey();
        }
    }
}

执行语句“str1.CompareTo(str2)”,输出1,说明str1大于str2。

1
  1. Equals
    Equals方法用于方便地判定两个字符串是否相同。如果两个字符串相等,Equals返回值为True;否则,返回False。
    编写程序,使用Equals方法比较两个字符串。
using System;
namespace Project4
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "Hello";
            string str2 = "Hi";
            Console.WriteLine(Equals(str1, str2));
            Console.WriteLine(str1.Equals (str2));
            Console.ReadKey();
        }
    }
}

String还支持两个比较运算符“==”和“!=”,分别用于判定两个字符是否相等和不等,并区分大小写。相对于上面介绍的方法,这两个运算符使用起来更加直观和方便。

False
False

字符串的格式化

Format方法用于创建格式化的字符串以及连接多个字符串对象。Foramt方法也有多个重载形式,最常用的为:
public static string Format(string format,params object[] args);
其中,参数Format用于指定返回字符串的格式,而args为一系列变量参数。
编写程序,通过字符串Format方法对5600进行格式化,并输出转化后的结果。

using System;
namespace Project5
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("字符串的格式化输出");
            string str = string.Format("默认格式:--{0}\n" + "使用C格式:{0:C}\n" +
                         "使用D格式:{0:D}\n" + "使用E格式:{0:E}\n" + "使用F格式:{0:F}\n" +
                         "使用G格式:{0:G1}\n" + "使用N格式:{0:N}\n" + "使用P格式:{0:P}\n" +
                         "使用X格式:{0:X}\n", 5600);
            Console.WriteLine(str);
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Format方法的使用。在代码中,首先定义一个字符串变量str,然后通过Format方法与数值格式符,将数值5600转换成各种类型进行输出。其中,C格式符是将数值转换成专用场合的货币值,所以在整数部分每隔三位数都会用一个逗号进行分隔;D格式符和G格式符都原样输出了5600,但是D格式符只用于整数类型,所以如果改成小数,输出则会报错;E格式符是按科学计数法进行输出;F格式符是输出整数和小数部分,小数部分默认输出两位,所以结果为5600.00,如果想要输出三位小数,则可以写成F3的形式;P格式符是保留两位小数进行输出,所以在数值后面添加了“%”。

字符串的格式化输出
默认格式:--5600
使用C格式:¥5,600.00
使用D格式:5600
使用E格式:5.600000E+003
使用F格式:5600.00
使用G格式:6E+03
使用N格式:5,600.00
使用P格式:560,000.00%
使用X格式:15E0

编写程序,将1~10之间按三位数输出。

using System;
namespace Project6
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("使用Format方法,将1~10之间按三位数输出:");
            for (int i = 1; i <= 10; i++)
            {
                string str = String.Format("{0:D3}", i);
                Console.WriteLine(str);               
            }
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Format方法的使用。在代码中,通过在数值格式符D的后面加上3,然后在使用Format方法时就会按三位整数进行转换。所以,最后在for循环中都是按三位进行输出。

使用Format方法,将1~10之间按三位数输出:
001
002
003
004
005
006
007
008
009
010

字符串的截取

String类提供了一个Substring方法,用于截取字符串中指定位置和指定长度的字符。
语法格式如下:
public string Substring (int startIndex,int length)
其中,startIndex表示字符串的起始位置的索引,length表示字符串中的字符数。
编写程序,截取一段字符串。

using System;
namespace Project7
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "0123456789";
            string s1 = str.Substring(3);
            Console.WriteLine(s1);
            string s2 = str.Substring(2, 5);
            Console.WriteLine(s2);
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Substring方法的使用。在代码中,定义一个字符串变量str,并为其赋值为“0123456789”。接着,定义字符变量s1,并使用Substring方法截取3以后的字符,所以s1的值为“3456789”。然后定义字符变量s2,使用Substring方法截取从第二个位置的字符开始数的5位字符,所以s2的值为“23456”。

3456789
23456

字符串的分割

使用Split方法可以把一个完整的字符串,按照某个分隔符,分裂成一系列小的字符串。分割后返回值是一个字符串数组。
Split有多个重载形式,最常用的形式为:
public string[] Split(params char[] separator);
其中,参数separator是一个字符数组,用于包含分割符。
编写程序,对字符串进行分割。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project8
{
    class Program
    {
        static void Main(string[] args)        
        {
            string str = "大家好&,欢迎$学@习C#! ";  //定义字符串
            Console.WriteLine("原字符串为:\n" + str);
            Console.WriteLine("使用split方法进行分割:" ); 
            char[] separator = { '&', '$', '@' };  //定义字符数组
            string[] changeStr = str.Split(separator);  //定义分割字符串
            foreach (string outstr in changeStr)
            {
                Console.Write(outstr);           
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Split方法的使用。在代码中,定义一个字符串变量str,并为其赋值“大家好&,欢迎KaTeX parse error: Expected 'EOF', got '#' at position 5: 学@习C#̲! ”。而使用Split方法的…”等去掉。因此,用户需要定义一个字符数组separator,在这个数组中包含这三个元素。而Split方法的返回值是一个字符串数组,因此用户需要再定义一个字符串数组changeStr,用来接收该方法。这里需要注意,由于使用了Split方法分割字符串后,字符串str将会分为四段,因此必须使用字符串数组(string[])来存储它们。

原字符串为:
大家好&,欢迎$学@习C#!
使用split方法进行分割:
大家好,欢迎学习C#!

字符串的合并

字符串合并可以通过以下三种方法实现。

  1. 连接运算符“+”
    String支持连接运算符“+”,可以方便地连接多个字符串,例如,下例把“大家好,”和“欢迎学习C#!”连接起来。
  2. Concat方法
    Concat方法用于连接两个或多个字符串。
  3. Join方法
    Join方法利用一个字符数组和一个分隔符构成新的字符串。常用于把多个字符串连接在一起,并用一个特殊的符号来分隔开。
    编写程序,将字符串用“-”字符进行连接。
using System;
namespace Project9
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "ABC";
            string str2 = "7752";
            string str3 = "#%$%";
            string newStr = string.Join("-", str1, str2, str3);
            Console.WriteLine(newStr);
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Join方法的使用。在代码中,定义了三个字符串str1、str2和str3,并为它们赋值。然后使用Join方法,通过“-”字符将三个字符串连接起来,赋给字符串变量newStr。

ABC-7752-#%$%

字符串的插入与填充

  1. 插入字符串
    String类提供了一个Insert方法,可以向一个字符串中的任意位置插入新元素。
    编写程序,使用Insert方法,补全字符串。
using System;
namespace Project10
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "HelloC";
            string insertStr1 = str1.Insert(6, "#");
            string insertStr2 = insertStr1.Insert(5, ", Welcom to");
            Console.WriteLine(insertStr2);
            Console.ReadKey();
        }
    }
}
Hello, Welcom toC#
  1. 填充字符串
    String类提供了填充字符串的方法,PadRight和PadLeft。PadRight方法是在字符串的右侧进行字符填充,而PadLeft是在字符串的左侧进行填充。
    编写程序,使用PadRight和PadLeft方法,填充字符串。
using System;
namespace Project11
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "33";
            string str2 = "444";
            string str3 = "5555";
            Console.WriteLine("PadRight用来在字符串右侧的结尾处添加指定字符,以达到指定的总长度");
            string padRightStr = str1.PadRight(5, '*') + "\n" +
                str2.PadRight(5, '*') + "\n" + str3.PadRight(5, '*');
            Console.WriteLine(padRightStr);
            Console.WriteLine("PadLeft用来在字符串左侧的开头添加指定的字符,以达到指定的总长度");
            string padLeftStr = str1.PadLeft(5, '*') + "\n" +
                str2.PadLeft(5, '*') + "\n" + str3.PadLeft(5, '*');
            Console.WriteLine(padLeftStr);
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了PadRight和PadLeft方法的使用。在代码中定义了三个字符串str1、str2和str3,并为它们赋值。接着,使用PadRight方法,对这三个字符串的右边使用“”进行填充,以实现右对齐。然后使用PadLeft方法,对左边使用“”进行填充,实现左对齐。

PadRight用来在字符串右侧的结尾处添加指定字符,以达到指定的总长度
33***
444**
5555*
PadLeft用来在字符串左侧的开头添加指定的字符,以达到指定的总长度
***33
**444
*5555

字符串的删除

字符串的删除是通过Remove方法来实现的。
其语法格式如下:
public string Remove(int startIndex,int count);
该方法有两种删除字符串的方式:第一种是将字符串开始位置后的所有字符删除;第二种是从一个字符串的指定位置开始,删除指定数量的字符。其中,参数startIndex用于指定开始删除的位置,从0开始索引;count指定删除的字符数量。
编写程序,通过Remove方法实现字符串的移除。

using System;
namespace Project12
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "abcd12345efg";
            string changeStr1 = str.Remove(4);
            Console.WriteLine("用一个参数实现Remove的结果:");
            Console.WriteLine(changeStr1);
            string changeStr2 = str.Remove(4, 5);
            Console.WriteLine("用两个参数实现Remove的结果:");
            Console.WriteLine(changeStr2);
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Remove方法的使用。在代码中,首先定义字符串str,并为其赋值;接着,使用一个参数的Remove方法删除‘d’字符以后的字符串,赋给变量changeStr1;然后再使用两个参数的Remove方法删除中间的字符串“12345”,赋给变量changeStr2。

用一个参数实现Remove的结果:
abcd
用两个参数实现Remove的结果:
abcdefg

字符串的修剪

若想把一个字符串首尾处的一些特殊字符剪切掉,可以使用String的Trim方法,如去掉一个字符串首尾的空格等。而在C#中有三个修剪字符串的方法Trim、TrimStart、TrimEnd。
(1) Trim方法删除字符串首部和尾部的空格。
(2) TrimStart方法只删除字符串的头部的空格。
(3) TrimEnd方法只删除字符串尾部的空格。
编写程序,对字符串进行修剪。

using System;
namespace Project13
{
    class Program
    {
        static void Main(string[] args)
        {
            //字符串的修剪通过Trim来实现
            string str = "     Hello-World     ";
            Console.WriteLine("原字符串是:*" + str + "*");
            Console.WriteLine("把空格修剪后是:*" + str.Trim() + "*");
            //修剪开始用TrimStart
            Console.WriteLine("修剪开始空格后是:*" + str.TrimStart() + "*");
            //修剪结束用TrimEnd
            Console.WriteLine("修剪结束空格后是:*" + str.TrimEnd() + "*");
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Trim、TrimStart和TrimEnd方法的使用。在代码中定义了一个字符串变量str,并为其赋值。为了区分这三种方法,在字符串的两边都添加了“*”。

原字符串是:*     Hello-World     *
把空格修剪后是:*Hello-World*
修剪开始空格后是:*Hello-World     *
修剪结束空格后是:*     Hello-World*

Trim方法也是有参数的,其语法格式如下:
public string Trim(params char[] trimChars);
其中,参数trimChars数组包含了指定要去掉的字符,如果缺省,则删除空格符号。
编写程序,将字符串“%#$#Hello-World@%”修剪为“Hello-World”。

using System;
namespace Project14
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "%#$#Hello-World@%";
            Console.WriteLine("修剪其他字符的方法:" + str.Trim('%', '#', '$', '@'));
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了带参数的Trim方法。在代码中,首先声明字符串变量str,并为其赋值,接着在Trim方法的括号里,添加要修剪的字符。

修剪其他字符的方法:Hello-World

字符串的复制

String类包括了复制字符串方法Copy和CopyTo,可以完成对一个字符串及其一部分的复制操作。

  1. Copy方法
    如果想要把一个字符串复制到另一个字符数组中,可以使用String的静态方法Copy来实现。
  2. CopyTo方法
    CopyTo方法可以实现Copy同样的功能,但功能更为丰富,可以复制字符串的一部分到一个字符数组中。另外,CopyTo不是静态方法。
    编写程序,对字符串进行复制。
using System;
namespace Project15
{
    class Program
    {
        static void Main(string[] args)
        {
            //Copy方法复制字符串
            //Copy方法是静态方法,
            //何为静态方法?就是关键字.方法名来进行引用,例如:string.Main()
            string str = "http://www.hao123.com";
            Console.WriteLine("Copy实现复制的结果:");
            string copyStr = string.Copy(str);
            Console.WriteLine(copyStr);

            //CopyTo是非静态方法
           // string copyToStr = str.CopyTo();
            Console.WriteLine("CopyTo实现复制的结果:");
            char[] mycharArray = new char[20];  //定义一个字符数组mycharArray,并为其分配20个字符的空间
            str.CopyTo(11, mycharArray, 0, 6);//CopyTo方法有一个参数是数组,用来存放复制好的字符串
            Console.WriteLine(mycharArray);  //所以,定义字符数组mycharArray,
                                             //11表示需要复制的字符的起始位置,
                                             //也就是从字符‘h’开始,指定目标数组中的开始存放位置,因此是0,指定要复制的字符个数。
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Copy和CopyTo方法的作用。在使用之前,用户需要了解静态方法与非静态方法。静态方法是通过关键字进行调用的,如string.方法名;而非静态方法是通过变量名进行调用的。而Copy是静态方法,CopyTo是非静态方法。在代码中,首先定义一个字符串变量str,并为其赋值“http://www.hao123.com”;接着使用Copy方法将该字符串复制给字符串变量copyStr。在调用Copy方法时,是通过关键字string进行的;然后,再通过变量名str调用CopyTo方法,复制字符串中的字符“hao123”,并存储到字符数组mycharArray中。
这里需要注意,CopyTo方法的第二个参数是一个数组,用来存放复制好的字符串,所以在代码中定义了字符数组mycharArray,并为其分配20字符的空间;CopyTo方法的第一个参数是指需要复制的字符的起始位置,也就是字符串str中从0开始数,第11个字符的位置‘h’;CopyTo方法的第三个参数是指定目标数组中的开始存放位置,也就是字符数组mycharArray的第0的位置;CopyTo方法的第四个参数是指定要复制的字符个数,也就从字符‘h’开始数6个字符。最后,由于CopyTo方法是没有返回值的,所以不能赋给任何变量。

Copy实现复制的结果:
http://www.hao123.com
CopyTo实现复制的结果:
hao123

字符串的替换

要替换一个字符串中的某些特定字符或者某个子串,可以使用Replace方法来实现。
语法格式为:
public string Replace(char oldChar,char newChar);
public string Replace(string oldValue, string newValue);
其中,参数oldChar和oldValue为待替换的字符和子串,而newChar和newValue为替换后的新字符和新子串。
编写程序,对一个字符串中的字符进行替换。

using System;
namespace Project16
{
    class Program
    {
        static void Main(string[] args)
        {
            string oldStr = "www.hao123";
            Console.WriteLine("替换前的字符串:"+oldStr);
            string newStr = oldStr.Replace('w', 'W');
            Console.WriteLine("替换后的字符串:"+newStr);
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了Replace方法的使用。在代码中,首先定义一个字符串变量oldStr并为其赋值;然后再定义一个字符串变量newStr,并使用Replace方法,把字符串中的’w’替换成’W’。最后将替换好的字符串再赋给变量newStr

替换前的字符串:www.hao123
替换后的字符串:WWW.hao123

字符串的查找

字符串的查找是通过IndexOf和LastIndexOf两个方法实现的。

  1. IndexOf
    查找字符串中指定字符或字符串首次出现的位置,并返回索引值。
  2. LastIndexOf
    在字符串中从后向前定位字符和字符串,并返回最后一次在所要查找的字符串中出现的位置。用法和IndexOf完全相同。
    编写程序,查找字符在字符串中的位置。
using System;
namespace Project17
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "Good morning, everyone.";
            //            0123456789ABCDEFG
            int str1 = str.IndexOf('g');//查找'g'在str中的索引值(位置)
            int str2 = str.IndexOf("morning");//查找"morning"的第一个字符在str中的索引值(位置)
            Console.WriteLine(str1+"\n"+str2);
            int str3 = str.LastIndexOf('d');
            Console.WriteLine(str3);
            Console.ReadKey();
        }
    }
}

【程序分析】本例演示了IndexOf方法的使用。在代码中,首先定义一个字符变量str,并为其赋值“Good morning, everyone.”;接着,调用IndexOf方法,查找字符’g’在str中的索引值,而该字符在字符串的第11的位置上,所以返回一个11;再查找“morning”的位置,而该字符串的第一个字符’m’在第5的位置上,所以返回一个5;最后调用LastIndexOf方法,查找出字符’d’的位置。

11
5
3

你可能感兴趣的:(VS-C#,c#)