C#字符串怎么使用

发布时间:2022-01-21 10:01:44 作者:iii
来源:亿速云 阅读:188
# C#字符串怎么使用

## 1. 字符串基础概念

### 1.1 什么是字符串
在C#中,字符串(`string`)是表示文本的字符序列,属于`System.String`类的别名。字符串在C#中是不可变的(immutable),这意味着一旦创建就不能修改。

```csharp
string greeting = "Hello, World!";

1.2 字符串的特性

2. 字符串创建与初始化

2.1 直接赋值

string s1 = "直接赋值";

2.2 使用构造函数

char[] letters = { 'C', 'S', 'h', 'a', 'r', 'p' };
string s2 = new string(letters);

2.3 字符串插值(C# 6.0+)

string name = "Alice";
int age = 25;
string info = $"姓名: {name}, 年龄: {age}";

3. 字符串常用操作

3.1 连接字符串

使用+运算符

string fullName = firstName + " " + lastName;

使用Concat方法

string combined = string.Concat(str1, str2);

使用Join方法

string[] words = { "C#", "字符串", "教程" };
string sentence = string.Join(" ", words);

3.2 字符串比较

使用==运算符

bool equal = (str1 == str2); // 区分大小写

使用Equals方法

bool equal = str1.Equals(str2, StringComparison.OrdinalIgnoreCase);

比较方法选择

方法 描述
Ordinal 二进制比较,最快
OrdinalIgnoreCase 不区分大小写的二进制比较
CurrentCulture 使用当前区域设置
InvariantCulture 使用固定区域设置

3.3 字符串查找

Contains方法

bool hasSubstring = source.Contains("查找内容");

IndexOf方法

int position = source.IndexOf('a'); // 返回首次出现的位置

LastIndexOf方法

int lastPosition = source.LastIndexOf('a'); // 返回最后出现的位置

3.4 字符串截取

Substring方法

string sub1 = source.Substring(5);    // 从位置5开始
string sub2 = source.Substring(0, 5); // 前5个字符

3.5 字符串替换

Replace方法

string newStr = original.Replace("旧", "新");

3.6 大小写转换

string upper = source.ToUpper();
string lower = source.ToLower();

3.7 去除空白字符

string trimmed = source.Trim();      // 两端
string trimmedStart = source.TrimStart(); // 开头
string trimmedEnd = source.TrimEnd();   // 结尾

4. 字符串格式化

4.1 复合格式化

string result = string.Format("今天是{0:yyyy-MM-dd}, 温度{1}℃", DateTime.Now, 23.5);

4.2 数字格式化

// 货币格式
string money = string.Format("{0:C}", 123.456); // ¥123.46

// 小数位数
string num = string.Format("{0:F2}", 123.4567); // 123.46

4.3 日期格式化

string date = string.Format("{0:yyyy年MM月dd日}", DateTime.Now);

5. 字符串与集合操作

5.1 分割字符串

string[] parts = csvString.Split(',');

5.2 高级分割

char[] delimiters = { ',', ';', '\t' };
string[] items = data.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

6. 字符串构建器(StringBuilder)

6.1 为什么需要StringBuilder

当需要频繁修改字符串时,使用StringBuilder可以避免创建大量临时字符串,提高性能。

StringBuilder sb = new StringBuilder();

6.2 常用方法

sb.Append("追加内容");
sb.AppendFormat("格式化{0}", 123);
sb.Insert(5, "插入内容");
sb.Replace("旧", "新");
string result = sb.ToString();

7. 字符串与编码

7.1 编码转换

// 字符串转字节数组
byte[] utf8Bytes = Encoding.UTF8.GetBytes(text);

// 字节数组转字符串
string text = Encoding.UTF8.GetString(utf8Bytes);

7.2 常用编码

8. 正则表达式处理

8.1 基本匹配

bool isMatch = Regex.IsMatch(input, @"^\d+$"); // 是否全数字

8.2 提取匹配

MatchCollection matches = Regex.Matches(input, @"\b\w+\b");
foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}

8.3 替换

string cleaned = Regex.Replace(input, @"\s+", " "); // 多个空格替换为单个

9. 字符串性能优化

9.1 避免不必要的字符串创建

// 不好
for (int i = 0; i < 100; i++)
{
    result += i.ToString();
}

// 推荐
var sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
    sb.Append(i);
}
string result = sb.ToString();

9.2 使用字符串驻留

string interned = string.Intern("重复使用的字符串");

9.3 选择适当的比较方式

// 文化敏感比较
bool equal = string.Equals(a, b, StringComparison.CurrentCulture);

// 不区分大小写的序号比较(性能更好)
bool equal = string.Equals(a, b, StringComparison.OrdinalIgnoreCase);

10. C# 11中的字符串新特性

10.1 原始字符串字面量

string json = """
    {
        "name": "张三",
        "age": 30
    }
    """;

10.2 UTF-8字符串字面量

ReadOnlySpan<byte> utf8Bytes = "这是UTF-8文本"u8;

11. 常见问题与解决方案

11.1 字符串不可变性的影响

// 每次修改都会创建新对象
string s = "hello";
s += " world"; // 创建了新字符串

11.2 空字符串检查

// 正确检查空字符串
if (string.IsNullOrEmpty(input)) { ... }

// 包括空白字符串检查
if (string.IsNullOrWhiteSpace(input)) { ... }

11.3 字符串与字符数组转换

// 字符串转字符数组
char[] chars = str.ToCharArray();

// 字符数组转字符串
string newStr = new string(chars);

12. 实际应用示例

12.1 用户输入验证

bool IsValidInput(string input)
{
    return !string.IsNullOrWhiteSpace(input) 
           && input.Length >= 6 
           && input.Length <= 20;
}

12.2 日志消息格式化

string FormatLogMessage(string user, string action, DateTime time)
{
    return $"[{time:yyyy-MM-dd HH:mm:ss}] 用户 '{user}' 执行了 '{action}'";
}

12.3 CSV数据处理

string[] ParseCsvLine(string line)
{
    return line.Split(',')
              .Select(s => s.Trim())
              .Where(s => !string.IsNullOrEmpty(s))
              .ToArray();
}

总结

C#中的字符串处理功能丰富而强大,从基本的创建、比较到高级的正则表达式和格式化操作,开发者需要根据具体场景选择最合适的方法。理解字符串的不可变性特性对于编写高效代码至关重要,在需要频繁修改字符串的场景中,StringBuilder是更好的选择。随着C#版本的更新,字符串功能也在不断进化,如C# 11引入的原始字符串字面量大大简化了多行字符串的处理。掌握这些字符串处理技巧将显著提升你的C#开发效率。 “`

推荐阅读:
  1. C#操作字符串
  2. [C#学习笔记]字符串

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:Linux中如何使用arpwatch命令

下一篇:plsql可不可以连接mysql

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》