C# 读书笔记第二节 基础知识

变量

  • 变量的声明方式
数据类型 变量名称;
  • 变量的命名
    由包括大小写在内的52个英文字母、0~9的10个数字、下划线“_”组成。不能含有其他字符
    必须以字母或下划线开头
    不能使用C#中的关键字作为变量名
  • 变量命名规范
    要有意义,尽量不要使用a、aa、bb等
    尽量避免使用单个字符作为变量名
    使用多个单词组成变量名时应使用驼峰命名法,即第一个单词的首字母小写

常量

  • 常量的声明方式
const 数据类型 常量名称;
  • 常量的命名规范
    常量命名必须具有一定的实际意义
    常量名称最好以大写字母来命名,可根据实际意义用下划线连接
    常量名称最好不要超过25个字符
    using System;
    namespace ConsoleMyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //定义圆周率常量PI
            const double PI = 3.1415926;
            //定义圆的半径变量
            double r = 3;
            //圆的周长
            double c = 2 * PI * r;
            //圆的面积
            double s = PI * r * r;
            Console.Write("圆的周长C=");
            //输出圆的周长
            Console.WriteLine(c);
            Console.Write("圆的面积S=");
            //输出圆的面积
            Console.WriteLine(s);
            Console.ReadLine();
        }
    }
}

在这里插入图片描述

变量与常量的初始化

  • 在C#中使用“=”为变量或常量初始化
//定义圆周率常量PI
const double PI = 3.1415926;
//定义圆的半径变量
double r = 3;          

数据类型的分类

C#数据类型分为值类型和引用类型两种

值类型

  • 值类型变量都存储在堆栈中
  • 访问值类型变量时,一般都是直接访问其实例
  • 每个值类型变量都有自己的数据副本,因此对一个值类型的变量的操作不会影响其他的变量
  • 复制值类型变量时,复制的是变量的值,而不是变量的地址
  • 值类型变量不能为null,必须具有一个确定的值
  • 值类型又可分为简单值类型和复合值类型
  • 简单值类型就是组成应用程序中基本构件的类型,包括整数类型、字符类型、实数类型、布尔类型等
  • 复合值类型包括结构类型、枚举类型

引用类型

  • 必须在托管堆中为引用类型变量分配内存
  • 必须使用new关键字来创建引用类型变量
  • 在托管堆中分配的每个对象都有与之相关联的附加成员,这些成员必须被初始化
  • 引用类型变量是由垃圾回收机制来管理的
  • 多个引用类型变量都可以引用同一个对象,这种情形下,对一个变量的操作会影响另一个变量所引用的同一对象
  • 引用类型被赋值之前的值都是null
  • 引用类型包括类、接口、委托和数组

C#数据类型表

类 型允许的值
booltrue或false
byte无符号8位整数
sbyte有符号8位整数
char16位Unicode字符
decimal128位浮点数,精确到小数点后28或29位
double64位浮点数,精确到小数点后15或16位
float32位浮点数,精确到小数点后7位
int有符号32位整数
uint无符号32位整数
long有符号64位整数
ulong无符号64位整数
short有符号64位整数
ushort无符号64位整数
stringUnicode字符串,引用类型

运算符的分类

按操作数划分

  • 一元运算符:处理一个操作数
  • 二元运算符:处理两个操作数
  • 三元运算符:处理三个操作数

按类型划分

算术运算符

运算符类 别示 例结 果
+二元运算符num = 6 + 3;两操作数之和:9
-二元运算符num = 6 - 3;两操作数之差:3
*二元运算符num = 6 * 3;两操作数之积:18
/二元运算符num = 6 / 3;两操作数之商:2
%二元运算符num = 6 % 3;两操作数取余:0
++一元运算符6++;对操作数自增1:7
一元运算符6–;对操作数自减1:5
  • 算术运算符的使用
using System;
namespace ConsoleArithmeticOperators
{
    class Program
    {
        static void Main(string[] args)
        {
            double num1, num2;  // 声明两个变量
            Console.WriteLine("请输入两个数字。");  // 提示用户输入
            Console.Write("第一个数字为:");
            num1 = Convert.ToDouble(Console.ReadLine());  // 接受输入
            Console.Write("第二个数字为:");
            num2 = Convert.ToDouble(Console.ReadLine());
            // 格式化输出
            Console.WriteLine("第一个数{0}与第二个数{1}之和为{2}", num1, num2,num1 + num2);  // 相加
            Console.WriteLine("第一个数{0}与第二个数{1}之差为{2}", num1, num2,num1 - num2);  // 相减
            Console.WriteLine("第一个数{0}与第二个数{1}之积为{2}", num1, num2, num1 * num2);  // 相乘
            Console.WriteLine("第一个数{0}与第二个数{1}之商为{2}", num1, num2,num1 / num2);  // 相除
            Console.WriteLine("第一个数{0}与第二个数{1}取余为{2}", num1, num2,num1 % num2);  // 取余
            Console.WriteLine("第一个数{0}后自增的结果为{1}", num1, num1++);  // 自增
            Console.WriteLine("第二个数{0}先自增的结果为{1}", num2, ++num2);  
            Console.WriteLine("当前第一个数的值为{0}", num1);
            Console.WriteLine("当前第二个数的值为{0}", num2);
            Console.WriteLine("第一个数{0}后自减的结果为{1}", num1, num1--);  // 自减
            Console.WriteLine("第二个数{0}先自减的结果为{1}", num2, --num2);
            Console.WriteLine("当前第一个数的值为{0}", num1);
            Console.WriteLine("当前第二个数的值为{0}", num2);
        }
    }
}

在这里插入图片描述

赋值运算符

运算符类 别示 例结 果
=二元运算符int num = 2;num=2,把右操作数2赋值给变量num
+=二元运算符int num = 6; num += 2;8,等同于num=num+2;
-=二元运算符int num = 6; num -= 2;4,等同于num=num-2;
*=二元运算符int num = 6; num *= 2;12,等同于num=num*2;
/=二元运算符int num = 6; num /= 2;3,等同于num=num/2;
%=二元运算符int num = 6; num %= 2;0,等同于num=num%2;

关系运算符

运算符类 别示 例结 果
==二元运算符v1==v2;如果v1等于v2,结果为true,否则为false
!=二元运算符v1!=v2;如果v1不等于v2,结果为true,否则为false
<二元运算符v1<v2;如果v1小于v2,结果为true,否则为false
>二元运算符v1>v2;如果v1大于v2,结果为true,否则为false
<=二元运算符v1<=v2;如果v1小于或等于v2,结果为true,否则为false
>=二元运算符v1>=v2;如果v1大于或等于v2,结果为true,否则为false

逻辑运算符

运算符类 别示 例结 果
!一元运算符v1=!v2;如果v2为false,则v1的值为true,否则为false
&二元运算符v1=v2&v3;如果v2和v3都为true,则v1的值为true,否则为false
&&二元运算符v1=v2&&v3;如果v2和v3都为true,则v1的值为true,否则为false
二元运算符v1=v2|v3;如果v2或v3中至少有一个为true,则v1的值为true,否则为false
||二元运算符v1=v2||v3;如果v2或v3中至少有一个为true,则v1的值为true,否则为false
^二元运算符v1=v2^v3;如果v2或v3中有且仅有一个为true,则v1的值为true,否则为false

运算符的优先级

  • 优先级由高到低
运算符描 述结合性
()圆括号自左向右
+ - ! ++ --一元运算符自左向右
* / %乘除运算符自左向右
+ -加、减自左向右
<< >>移位运算符自左向右
< > <= >=关系运算符自左向右
== !=比较运算符自右向左
& | ^按位AND、XOR、OR自左向右
&& ||布尔AND、OR自左向右
= *= /= %= += -=赋值运算符自左向右
&= |= ^= >>>= <<= >>=其他运算符自左向右

字符与字符串的处理

char的使用

  • char关键字用于声明.NET Framework中使用Unicode字符表示System.Char结构的实例
  • Char对象的值是16位数字
  • char的声明与初始化:
char 变量名 = '变量值';

例如:
char char1='T';
char char2='9';

Char类的应用

方 法说 明
CompareTo(Char)将此实例与指定的Char对象进行比较,并指示此实例在排序顺序中是位于指定的Char对象之前、之后还是与其出现在同一位置
CompareTo(Object)将此实例与指定的对象进行比较,并指示此实例在排序顺序中是位于该指定的Object之前、之后还是与其出现在同一位置
ConvertFromUtf32将指定的Unicode码位转换为UTF-16编码字符串
ConvertToUtf32(Char, Char)将UTF-16编码的代理项对的值转换为Unicode码位
ConvertToUtf32(String, Int32)将字符串中指定位置的UTF-16编码字符或代理项对的值转换为Unicode码位
Equals(Char)返回一个值,该值指示此实例是否与指定的Char对象相等
Equals(Object)返回一个值,该值指示此实例是否与指定的对象相等(重写ValueType.Equals(Object))
GetHashCode返回此实例的哈希代码(重写ValueType.GetHashCode())
GetNumericValue(Char)将指定的数字Unicode字符转换为双精度浮点数
GetNumericValue(String, Int32)将指定字符串中位于指定位置的数字Unicode字符转换为双精度浮点数
GetType获取当前实例的Type(继承自Object)
GetTypeCode返回值类型Char的TypeCode
GetUnicodeCategory(Char)将指定的Unicode字符分类到由某个UnicodeCategory值标识的组中
GetUnicodeCategory(String, Int32)将指定字符串中位于指定位置的字符分类到由一个UnicodeCategory值标识的组中
IsControl(Char)指示指定的Unicode字符是否属于控制字符类别
IsControl(String, Int32)指示指定字符串中位于指定位置处的字符是否属于控制字符类别
IsDigit(Char)指示指定的Unicode字符是否属于十进制数字类别
IsDigit(String, Int32)指示指定字符串中位于指定位置处的字符是否属于十进制数字类别
IsHighSurrogate(Char)指示指定的Char对象是否为高代理项
IsHighSurrogate(String, Int32)指示字符串中指定位置处的Char对象是否为高代理项
IsLetter(Char)指示指定的Unicode字符是否属于Unicode字母类别
IsLetter(String, Int32)指示指定字符串中位于指定位置处的字符是否属于Unicode字母类别
IsLetterOrDigit(Char)指示指定的Unicode字符是否属于字母或十进制数字类别
IsLetterOrDigit(String, Int32)指示指定字符串中位于指定位置处的字符是否属于字母或十进制数字类别
IsLower(Char)指示指定的Unicode字符是否属于小写字母类别
IsLower(String, Int32)指示指定字符串中位于指定位置处的字符是否属于小写字母类别
IsLowSurrogate(Char)指示指定的Char对象是否为低代理项
IsLowSurrogate(String, Int32)指示字符串中指定位置处的Char对象是否为低代理项
IsNumber(Char)指示指定的Unicode字符是否属于数字类别
IsNumber(String, Int32)指示指定字符串中位于指定位置的字符是否属于数字类别
IsPunctuation(Char)指示指定的Unicode字符是否属于标点符号类别
IsPunctuation(String, Int32)指示指定字符串中位于指定位置处的字符是否属于标点符号类别
IsSeparator(Char)指示指定的Unicode字符是否属于分隔符类别
IsSeparator(String, Int32)指示指定字符串中位于指定位置处的字符是否属于分隔符类别
IsSurrogate(Char)指示指定的字符是否具有代理项码单元
IsSurrogate(String, Int32)指示指定字符串中位于指定位置的字符是否具有代理项码单元
IsSurrogatePair(Char, Char)指示两个指定的Char对象是否形成代理项对
IsSurrogatePair(String, Int32)指示字符串中指定位置处的两个相邻Char对象是否形成代理项对
IsSymbol(Char)指示指定的Unicode字符是否属于符号字符类别
IsSymbol(String, Int32)指示指定字符串中位于指定位置处的字符是否属于符号字符类别
IsUpper(Char)指示指定的Unicode字符是否属于大写字母类别
IsUpper(String, Int32)指示指定字符串中位于指定位置处的字符是否属于大写字母类别
IsWhiteSpace(Char)指示指定的Unicode字符是否属于空白类别
IsWhiteSpace(String, Int32)指示指定字符串中位于指定位置处的字符是否属于空白类别
Parse将指定字符串的值转换为它的等效Unicode字符
ToLower(Char)将Unicode字符的值转换为它的小写等效项
ToLower(Char, CultureInfo)使用指定的区域性特定格式设置信息将指定Unicode字符的值转换为它的小写等效项
ToLowerInvariant使用固定区域性的大小写规则,将Unicode字符的值转换为其小写等效项
ToString()将此实例的值转换为其等效的字符串表示形式(重写ValueType. ToString())
ToString(Char)将指定的Unicode字符转换为它的等效字符串表示形式
ToString(IFormatProvider)使用指定的区域性特定格式信息将此实例的值转换为它的等效字符串表示形式
ToUpper(Char)将Unicode字符的值转换为它的大写等效项
ToUpper(Char, CultureInfo)使用指定的区域性特定格式设置信息将指定Unicode字符的值转换为它的大写等效项
ToUpperInvariant使用固定区域性的大小写规则,将Unicode字符的值转换为其大写等效项
TryParse将指定字符串的值转换为它的等效Unicode字符。返回一个指示转换是否成功的代码
  • 使用Char类方法操作字符
using System;

namespace ConsoleCharClass
{
    class Program
    {
        static void Main(string[] args)
        {
            //声明字符a到g
            char a = 'a';
            char b = 'M';
            char c = '6';
            char d = '.';
            char e = '☆';
            char f = '|';
            char g = ' ';

            //使用IsLetter方法判断变量a是否为字母
            Console.WriteLine("IsLetter方法判断变量a是否为字母:{0}", Char.IsLetter(a));

             //使用IsDigit方法判断变量c是否为十进制数字
            Console.WriteLine("IsDigit方法判断变量c是否为十进制数字:{0}",Char.IsDigit(c));

            //使用IsLower方法判断变量a是否为小写字母
            Console.WriteLine("IsLower方法判断变量a是否为小写字母:{0}", Char.IsLower(a));
            //使用IsUpper方法判断变量b是否为大写字母
            Console.WriteLine("IsUpper方法判断变量b是否为大写字母:{0}", Char.IsUpper(b));

            //使用IsPunctuation方法判断变量d是否为标点符号
            Console.WriteLine("IsPunctuation方法判断变量d是否为标点符号:{0}",Char.IsPunctuation(d));

            //使用IsSymbol方法判断变量e是否为符号
            Console.WriteLine("IsSymbol方法判断变量e是否为符号:{0}", Char.IsSymbol(e));

            //使用IsSeparator方法判断变量f是否为分隔符
            Console.WriteLine("IsSeparator方法判断变量f是否为分隔符:{0}",Char.IsSeparator(f));

            //使用IsWhiteSpace方法判断变量g是否为空白
            Console.WriteLine("IsWhiteSpace方法判断变量g是否为空白:{0}",Char.IsWhiteSpace(g));
        }
    }
}

在这里插入图片描述

转义字符

  • 以反斜线“\”开头,后跟一个或多个字符
  • 转义字符主要用来表示那些用一般字符不便于表示的控制代码
  • 它的作用是消除紧随其后的字符的原有含义
  • 用可以看见的字符表示那些不可以看见的字符,如’\n’表示换行
转义字符意 义
\'单引号符
\"双引号符
\\反斜线符“\”
\0空字符(null)
\a鸣铃
\b退格
\f走纸换页
\n换行
\r回车
\t横向跳到下一制表位置
\v竖向跳格
  • 转义符的应用
using System;

namespace ConsoleEscapeCharacter
{
    class Program
    {
        static void Main(string[] args)
        {
            string name, address, age;  // 声明三个变量
            Console.Write("请输入您的姓名:");  // 提示
            name = Console.ReadLine();  // 接收
            Console.Write("请输入您的年龄:");
            age = Console.ReadLine();
            Console.Write("请输入您的出生地:");
            address = Console.ReadLine();
            Console.WriteLine("您的基本信息如下:");
            Console.WriteLine("姓名\t年龄\t出生地");  // 使用制表符
            Console.WriteLine("{0}\t{1}\t{2}", name, age, address);  // 输出信息
        }
    }
}

在这里插入图片描述

字符串类String的使用

String类的使用

  • 字符串是Unicode字符的有序集合,用于表示文本
  • String对象是System.Char对象的有序集合,用于表示字符串
  • String对象的值是该有序集合的内容,并且该值是不可变的
  • 字符在字符串中的索引从零开始
using System;

namespace ConsoleGetCharByString
{
    class Program
    {
        static void Main(string[] args)
        {
            //声明一个字符串变量
            string str = "Hello World!";
            //获取字符串str的第2个字符
            char char1 = str[1];
            //获取字符串str的第3个字符
            char char2 = str[2];
            //获取字符串str的第7个字符
            char char3 = str[6];
            //输出
            Console.WriteLine("字符串str中的第二个字符是:{0}", char1);
            Console.WriteLine("字符串str中的第三个字符是:{0}", char2);
            Console.WriteLine("字符串str中的第七个字符是:{0}", char3);
        }
    }
}

在这里插入图片描述

常用的字符串处理方法

方 法说 明
bool Equals(string value)比较一个字符串与另一个字符串value的值是否相等。如果二者相等返回true;如果不相等返回false。该方法的作用与运算符“==”相同
int Compare(string str1,string str2)比较两个字符串的大小关系,返回一个整数。如果str1小于str2,返回值小于0;如果str1等于str2,返回值为0;如果str1大于str2,返回值大于0
int IndexOf(string value)获取指定的value字符串在当前字符串中的第一个匹配项的位置。如果找到了value,就返回它的位置;如果没有找到,就返回–1
int LastIndexOf(string value)获取指定的字符串value在当前字符串中最后一个匹配项的位置。如果找到了value,就返回它的位置;如果没有找到,就返回–1
string Join(string separator,string[] value)把字符串数组value中的每个字符串用指定的分隔符separator连接,返回连接后的字符串
string Split(char separator)用指定的分隔符separator分割字符串,返回分割后的字符串数组
string Sunstring(int startIndex,int length)从指定的位置startIndex开始检索长度为length的子字符串
string ToLower()获得字符串的小写形式
string ToUpper()获得字符串的大写形式
string Trim()去掉字符串前后两端多余的空格

比较字符串

Equals方法
  • Equals方法通常用来比较两个对象的值是否相等,如果相同返回true,否则返回false
using System;

namespace ConsoleEquals
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "Hello World!";
            string str2 = "HelloWorld!";
            Console.WriteLine(str1.Equals(str2));
            Console.WriteLine(String.Equals(str1, str2));  // 比较两个字符串
        }
    }
}

在这里插入图片描述
运算符==和String类方法Equals()的区别如下:

  • ==通常用来比较int、double等数值类型的数据是否相等
  • Equals()通常用来比较两个对象的值是否相等

" "和String.Empty()的区别如下:

  • " "为String对象分配长度为0的内存空间
  • String.Empty()不会为对象分配内存空间
Compare方法
  • Compare方法用来比较两个字符串是否相等
using System;

namespace ConsoleCompare
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "Hello World!";
            string str2 = "HelloWorld!";
            Console.WriteLine(string.Compare(str1, str2));
            Console.WriteLine(string.Compare(str2, str1));
            Console.WriteLine(String.Compare(str1, str1));
        }
    }
}

在这里插入图片描述

  • 比较字符串并非比较字符串长度的大小,而是比较字符串在英文字典中的位置
  • 比较字符串按照字典排序规则判断两个字符串的大小,在英文字典中,前面的单词小于后面的单词
CompareTo方法
  • CompareTo方法与Compare方法类似,都可以比较两个字符串是否相等,不同的是CompareTo方法以实例对象本身指定的字符串做比较
using System;

namespace ConsoleCompareTo
{
    class Program
    {
        static void Main(string[] args)
        {

            string str1 = "你好啊";
            string str2 = "你好";
            Console.WriteLine(str1.CompareTo(str2));
        }
    }
}

在这里插入图片描述

CompareOrdinal方法
  • CompareOrdinal方法对两个字符串进行比较,不考虑本地化语言和文化
using System;

namespace ConsoleCompareOrdinal
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "Hello Worlda";
            string str2 = "Hello WorldA";
            Console.WriteLine(string.CompareOrdinal(str1, str2));
        }
    }
}

在这里插入图片描述

截取字符串

  • String类提供了Substring方法,该方法用于截取字符串中指定位置和指定长度的字符
using System;

namespace ConsoleSubstring
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "HelloWorld!";
            string str2 = str1.Substring(5, 6);
            Console.WriteLine(str2);
        }
    }
}

在这里插入图片描述

IndexOf方法取索引

  • IndexOf方法报告指定的字符在此实例中的第一个匹配项的索引。搜索从指定字符位置开始,并检查指定数量的字符位置
public int IndexOf(value, [startIndex], [count])


value:要查找的Unicode字符。对value的搜索区分大小写
startIndex(Int32):可选项,搜索起始位置。不设置则从0开始
count(Int32):可选项,要检查的字符位数
using System;

namespace ConsoleIndexOf
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "HelloWorld!";
            string str2 = "o";
            Console.WriteLine(str1.IndexOf(str2));
            Console.WriteLine(str1.IndexOf(str2, 5));  // 指定位置开始
            Console.WriteLine(str1.IndexOf(str2, 0, 4));  // 开始和结束
        }
    }
}

在这里插入图片描述

连接字符串

  • C#中连接字符串使用String类的Join()方法
public string Join(string value,string[] args)

value为连接字符串的连接符,args为要连接的string数组对象
在指定的args数组的每个元素之间串联指定的分隔符value,从而产生单个串联的字符串
using System;

namespace ConsoleJoin
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "-";  // 定义连接符
            string[] strs = new string[] { "hi", "china", "hello", "world" };
            Console.WriteLine(string.Join(str1, strs));
        }
    }
}

在这里插入图片描述

分割字符串

using System;

namespace ConsoleSplit
{
    class Program
    {
        static void Main(string[] args)
        {

            string str1 = "a,b.c,,d,e";
            //1. public string[] Split(params char[] separator)
            string[] split1 = str1.Split(new Char[] { ',' });
            string[] split2 = str1.Split(new Char[] { ',', '.' });
            foreach (string s in split1)
            {
                Console.Write(s + "#");
            }
            Console.WriteLine();
            foreach (string s in split2)
            {
                Console.Write(s + "#");
            }
            //2. public string[] Split(char[] separator, int count)

            string[] split3 = str1.Split(new Char[] { ',', '.' }, 2);
            string[] split4 = str1.Split(new Char[] { ',', '.' }, 6);
            Console.WriteLine();
            foreach (string s in split3)
            {
                Console.Write(s + "#");
            }
            Console.WriteLine();
            foreach (string s in split4)
            {
                Console.Write(s + "#");
            }
            //3. public string[] Split(char[] separator, StringSplitOptions  options)
            string[] split5 = str1.Split(new Char[] { ',', '.' },
            StringSplitOptions.RemoveEmptyEntries);
            string[] split6 = str1.Split(new Char[] { ',', '.' },
            StringSplitOptions.None);
            Console.WriteLine();
            foreach (string s in split5)
            {
                Console.Write(s + "#");
            }
            Console.WriteLine();
            foreach (string s in split6)
            {
                Console.Write(s + "#");
            }
            //4. public string[] Split(string[] separator, StringSplitOptions options)
            string[] split7 = str1.Split(new string[] { ",", "." },
            StringSplitOptions.RemoveEmptyEntries);
            //返回:{"1","2","3","4"} 不保留空元素
            string[] split8 = str1.Split(new string[] { ",", "." },
                StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
            Console.WriteLine();
            foreach (string s in split7)
            {
                Console.Write(s + "#");
            }
            Console.WriteLine();
            foreach (string s in split8)
            {
                Console.Write(s + "#");
            }
            //5. public string[] Split(char[] separator, int count, StringSplitOptions options)

            string[] split9 = str1.Split(new Char[] { ',', '.' }, 2,
            StringSplitOptions.RemoveEmptyEntries);
            string[] split10 = str1.Split(new Char[] { ',', '.' }, 6,
            StringSplitOptions.None);
            Console.WriteLine();
            foreach (string s in split9)
            {
                Console.Write(s + "#");
            }
            Console.WriteLine();
            foreach (string s in split10)
            {
                Console.Write(s + "#");
            }

            //6. public string[] Split(string[] separator, int count, StringSplitOptions options)

            string[] split11 = str1.Split(new string[] { ",", "." }, 2,
            StringSplitOptions.RemoveEmptyEntries);
            string[] split12 = str1.Split(new string[] { ",", "." }, 6,
            StringSplitOptions.None);
            Console.WriteLine();
            foreach (string s in split11)
            {
                Console.Write(s + "#");
            }
            Console.WriteLine();
            foreach (string s in split12)
            {
                Console.Write(s + "#");
            }
        }
    }
}

在这里插入图片描述

  • 代码中使用foreach循环输出数组的每个元素,并用#号连接

替换字符串

using System;

namespace ConsoleReplace
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "hello world.";
            string str2 = str1.Replace('.', '!');
            Console.WriteLine(str2);
            string str3 = str1.Replace("world", "Tom");
            Console.WriteLine(str3);
        }
    }
}

在这里插入图片描述

格式化字符串

using System;

namespace ConsoleFormat
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "你好";
            string str2 = "中国";
            string newStr = string.Format("{0},{1}!!", str1, str2);
            Console.WriteLine(newStr);
        }
    }
}

在这里插入图片描述

  • 不过我知道 $ 也可以格式化字符串
using System;

namespace ConsoleFormat
{
    class Program
    {
        static void Main(string[] args)
        {
            string str1 = "你好";
            string str2 = "中国";
            Console.WriteLine($"{str1}{str2}");
        }
    }
}

在这里插入图片描述

格式化数值
字 符说 明示 例输出结果
C货币格式String.Format("{0:C3}",5555)¥5555.000
D十进制格式String.Format("{0:D3}",5555)5555
F小数点后的位数固定String.Format("{0:F3}",5555)5555.000
N用逗号隔开的数字String.Format("{0:N}",5555)5,555.00
P百分比记数法String.Format("{0:P3}",0.2345)23.45
X十六进制格式String.Format("{0:X000}",11)B
格式化日期时间
字 符说 明
d简短日期格式(YYYY-MM-dd)
D完整日期格式(YYYY年MM月dd日)
t简短时间格式(hh:mm)
T完整时间格式(hh:mm:ss)
f简短日期/时间格式(YYYY年MM月dd日hh:mm)
F完整日期/时间格式(YYYY年MM月dd日hh:mm:ss)
g简短的可排序的日期/时间格式(YYYY-MM-dd hh:mm)
G完整的可排序的日期/时间格式(YYYY-MM-dd hh:mm:ss)
M或m月/日格式(MM月dd日)
Y或y年/月格式(YYYY年MM月)
  • 使用Format格式化日期时间
using System;

namespace ConsoleFormatDateTime
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Now;  // 获取系统当前时间
            string str1 = String.Format("{0:t}", dt);
            Console.WriteLine(str1);
        }
    }
}

在这里插入图片描述

类型转换

简单的类型转换

  • 在C#中简单的类型转换包括隐式类型转换和显式类型转换
隐式类型转换
  • 对于任何数值类型A来说,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B
显式类型转换
  • 显式类型转换与隐式类型转换相反,当要把取值范围大的类型转换为取值范围小的类型时,就需要执行显式转换了
using System;

namespace ConsoleConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            //文化课成绩
            double score = 73.5;
            //艺术课加分
            int bonus = 43;
            //总分
            int sum = (int)score + bonus;  // 转换为整型

            Console.WriteLine("文化课成绩:{0}分", score);
            Console.WriteLine("艺术课加分:{0}分", bonus);
            Console.WriteLine("总分:{0}分", sum);
        }
    }
}

在这里插入图片描述

数值类型与字符串类型的转换

字符串转换为数值类型

C#中提供了各种类型的Parse()方法来进行类型转换

  • 将字符串转为整型代码为
int.Parse(strValue);
  • 将字符串转为float型代码为
float.Parse(strValue);
  • 将字符串转为double型代码为
double.Parse(strValue);
  • 此处的strValue必须是数字的有效表示形式。简单地讲就是看起来是对应的数字,但实际上是string类型。例如,可以把“5555”转换为整数,而不能把“zhangsan”等转换为整数
数值类型转换为字符串
  • C#中,数值类型转换为字符串非常简单,只要调用其ToString()方法就可以了
int num=521;
string strNum=num. ToString();
  • 除此之外,还可以使用“+”连接符拼接一个空的字符串实现相同的效果
int num=521;
string strNum=num+"";
使用Convert类进行转换
  • 除了使用Parse()方法外,还可使用Convert类进行转换
  • Convert类可以在各种基本类型之间执行数据类型的互相转换,它为每种类型转换都提供了一个对应的方法
方 法说 明
Convert.ToInt32()转换为int类型
Convert.ToChar()转换为char类型
Convert.ToDecimal()转换为decimal类型
Convert.ToSingle()转换为float类型
Convert.ToString()转换为string类型
Convert.ToDateTime()转换为DateTime类型
Convert.ToDouble()转换为double类型
Convert.ToBoolean()转换为bool类型
  • 方法中的参数就是需要进行转换的数值
using System;

namespace ConsoleConvertClass
{
    class Program
    {
        static void Main(string[] args)
        {
            double dNum = 76.74;
            int iNum;
            decimal decimalNum;
            float fNum;
            string sNum;
            bool flag;

            iNum = Convert.ToInt32(dNum);
            decimalNum = Convert.ToDecimal(dNum);
            fNum = Convert.ToSingle(dNum);
            sNum = Convert.ToString(dNum);
            flag = Convert.ToBoolean(dNum);

            Console.WriteLine("原数值为double类型:" + dNum);

            Console.WriteLine("转换后为:");
            Console.WriteLine("int类型:\t" + iNum);
            Console.WriteLine("decimal类型:\t" + decimalNum);
            Console.WriteLine("float类型:\t" + fNum);
            Console.WriteLine("string类型:\t" + sNum);
            Console.WriteLine("bool类型:\t" + flag);
        }
    }
}

在这里插入图片描述

  • 转换为int类型时,进行了四舍五入的计算,所以结果为77,这与显式类型转换有所不同,如果使用显式类型转换将76.74转换为int类型的结果是76,它是直接将小数点后的数值舍弃掉了。
  • 转换为bool类型的时候,只要转换的值不为0,那么结果就是true,否则为false

可变字符串类StringBuilder的使用

属 性说 明
Capacity获取或设置可包含在当前对象所分配的内存空间中的最大字符个数
Length获取或设置当前对象的长度
方 法说 明
Append()在结尾追加
AppendLine ()将默认的行终止符追加到当前对象的末尾
AppendFormat()添加特定格式的字符串
Insert()将字符串或对象添加到当前StringBuilder对象中的指定位置上
Remove()从当前StringBuilder对象中移除指定范围的字符
Replace()将StringBuilder对象内的特定字符用另一个指定的字符来替换
ToString()将StringBuilder类对象转换为String类对象
using System;
using System.Text;


namespace ConsoleStringBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("明月几时有?");
            sb.AppendLine("把酒问青天。");
            sb.AppendLine("不知天上宫阙,");
            sb.AppendLine("今夕是何年?");
            sb.AppendLine("我欲乘风归去,");
            sb.AppendLine("又恐琼楼玉宇,");
            sb.AppendLine("高处不胜寒。");
            sb.AppendLine("起舞弄清影,");
            sb.AppendLine("何似在人间?");
            sb.AppendLine("转朱阁,");
            sb.AppendLine("低绮户,");
            sb.AppendLine("照无眠。");
            sb.AppendLine("不应有恨、");
            sb.AppendLine("何事长向别时圆?");
            sb.AppendLine("人有悲欢离合,");
            sb.AppendLine("月有阴晴圆缺,");
            sb.AppendLine("此事古难全。");
            sb.AppendLine("但愿人长久,");
            sb.AppendLine("千里共婵娟。");
            sb.Insert(0, "《水调歌头·中秋》\n\n");
            int count = sb.Capacity;
            sb.Insert(sb.Length, "\t\t——苏轼");
            sb.Append("\t(字符数为:" + count + ")");
            Console.WriteLine(sb.ToString());
        }
    }
}

在这里插入图片描述

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页