字符串是由零个或多个字符组成的有限序列,是几乎所有编程语言中可以实现的非常重要和有用的数据类型。
字符串是“System. String”类的一个引用类型,但与其他引用类型不同的是,C#将字符串视为一个基本类型,可以声明为一个变量,并为其赋值。
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。
编写程序,使用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
编写程序,使用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
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#!
字符串合并可以通过以下三种方法实现。
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-#%$%
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#
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,可以完成对一个字符串及其一部分的复制操作。
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两个方法实现的。
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