C#操作字符串方法总结<转>

 

staticvoid Main(string[] args)
{
            
string s ="";
            
//(1)字符访问(下标访问s[i])
            s ="ABCD";
            Console.WriteLine(s[
0]); // 输出"A";
            Console.WriteLine(s.Length); // 输出4
            Console.WriteLine();

            
//(2)打散为字符数组(ToCharArray)
            s ="ABCD";
            
char[] arr = s.ToCharArray(); // 把字符串打散成字符数组{'A','B','C','D'}
            Console.WriteLine(arr[0]); // 输出数组的第一个元素,输出"A"
            Console.WriteLine();

            
//(3)截取子串(Substring)
            s ="ABCD";
Console.WriteLine(s.Substring(
1)); // 从第2位开始(索引从0开始)截取一直到字符串结束,输出"BCD"
            Console.WriteLine(s.Substring(12)); // 从第2位开始截取2位,输出"BC"
            Console.WriteLine();

            
//(4)匹配索引(IndexOf())
            s ="ABCABCD";
            Console.WriteLine(s.IndexOf(
'A')); // 从字符串头部开始搜索第一个匹配字符A的位置索引,输出"0"
            Console.WriteLine(s.IndexOf("BCD")); // 从字符串头部开始搜索第一个匹配字符串BCD的位置,输出"4"
            Console.WriteLine(s.LastIndexOf('C')); // 从字符串尾部开始搜索第一个匹配字符C的位置,输出"5"
            Console.WriteLine(s.LastIndexOf("AB")); // 从字符串尾部开始搜索第一个匹配字符串BCD的位置,输出"3"
            Console.WriteLine(s.IndexOf('E')); // 从字符串头部开始搜索第一个匹配字符串E的位置,没有匹配输出"-1";
            Console.WriteLine(s.Contains("ABCD")); // 判断字符串中是否存在另一个字符串"ABCD",输出true
            Console.WriteLine();

            
//(5)大小写转换(ToUpper和ToLower)
            s ="aBcD";
            Console.WriteLine(s.ToLower()); 
// 转化为小写,输出"abcd"
            Console.WriteLine(s.ToUpper()); // 转化为大写,输出"ABCD"
            Console.WriteLine();

            
//(6)填充对齐(PadLeft和PadRight)
            s ="ABCD";
            Console.WriteLine(s.PadLeft(
6'_')); // 使用'_'填充字符串左部,使它扩充到6位总长度,输出"__ABCD"
            Console.WriteLine(s.PadRight(6'_')); // 使用'_'填充字符串右部,使它扩充到6位总长度,输出"ABCD__"
            Console.WriteLine();

            
//(7)截头去尾(Trim)
            s ="__AB__CD__";
            Console.WriteLine(s.Trim(
'_')); // 移除字符串中头部和尾部的'_'字符,输出"AB__CD"
            Console.WriteLine(s.TrimStart('_')); // 移除字符串中头部的'_'字符,输出"AB__CD__"
            Console.WriteLine(s.TrimEnd('_')); // 移除字符串中尾部的'_'字符,输出"__AB__CD"
            Console.WriteLine();

            
//(8)插入和删除(Insert和Remove)
            s ="ADEF";
            Console.WriteLine(s.Insert(
1"BC")); // 在字符串的第2位处插入字符串"BC",输出"ABCDEF"
            Console.WriteLine(s);
            Console.WriteLine(s.Remove(
1)); // 从字符串的第2位开始到最后的字符都删除,输出"A"
            Console.WriteLine(s);
            Console.WriteLine(s.Remove(
02)); // 从字符串的第1位开始删除2个字符,输出"EF"
            Console.WriteLine();

            
//(9)替换字符(串)(Replace)
            s ="A_B_C_D";
            Console.WriteLine(s.Replace(
'_''-')); // 把字符串中的'_'字符替换为'-',输出"A-B-C-D"
            Console.WriteLine(s.Replace("_""")); // 把字符串中的"_"替换为空字符串,输出"A B C D"
            Console.WriteLine();

            
//(10)分割为字符串数组(Split)——互逆操作:联合一个字符串静态方法Join(seperator,arr[])
            s ="AA,BB,CC,DD";
            
string[] arr1 = s.Split(','); // 以','字符对字符串进行分割,返回字符串数组
            Console.WriteLine(arr1[0]); // 输出"AA"
            Console.WriteLine(arr1[1]); // 输出"BB"
            Console.WriteLine(arr1[2]); // 输出"CC"
            Console.WriteLine(arr1[3]); // 输出"DD"
            Console.WriteLine();

            s 
="AA--BB--CC--DD";
            
string[] arr2 = s.Replace("--""-").Split('-'); // 以字符串进行分割的技巧:先把字符串"--"替换为单个字符"-",然后以'-'字符对字符串进行分割,返回字符串数组
            Console.WriteLine(arr2[0]); // 输出"AA"
            Console.WriteLine(arr2[1]); // 输出"BB"
            Console.WriteLine(arr2[2]); // 输出"CC"
            Console.WriteLine(arr2[3]); // 输出"DD"
            Console.WriteLine();

            
//(11)格式化(静态方法Format)
            Console.WriteLine(string.Format("{0} + {1} = {2}"121+2));
            Console.WriteLine(
string.Format("{0} / {1} = {2:0.000}"131.00/3.00));
            Console.WriteLine(
string.Format("{0:yyyy年MM月dd日}", DateTime.Now));


            
//(12)连接成一个字符串(静态方法Concat、静态方法Join和实例方法StringBuilder.Append)
            s ="A,B,C,D";
            
string[] arr3 = s.Split(','); // arr = {"A","B","C","D"}

            Console.WriteLine(
string.Concat(arr3)); // 将一个字符串数组连接成一个字符串,输出"ABCD"

            Console.WriteLine(
string.Join(",", arr3)); // 以","作为分割符号将一个字符串数组连接成一个字符串,输出"A,B,C,D"

            StringBuilder sb 
=new StringBuilder(); // 声明一个字符串构造器实例
            sb.Append("A"); // 使用字符串构造器连接字符串能获得更高的性能
            sb.Append('B');
            Console.WriteLine(sb.ToString());
// 输出"AB"

            Console.ReadKey();
        }
namespace ServiceRanking { /// <summary> /// Summary description for TF_IDFLib. /// </summary> public class TFIDFMeasure { private string[] _docs; private string[][] _ngramDoc; private int _numDocs=0; private int _numTerms=0; private ArrayList _terms; private int[][] _termFreq; private float[][] _termWeight; private int[] _maxTermFreq; private int[] _docFreq; public class TermVector { public static float ComputeCosineSimilarity(float[] vector1, float[] vector2) { if (vector1.Length != vector2.Length) throw new Exception("DIFER LENGTH"); float denom=(VectorLength(vector1) * VectorLength(vector2)); if (denom == 0F) return 0F; else return (InnerProduct(vector1, vector2) / denom); } public static float InnerProduct(float[] vector1, float[] vector2) { if (vector1.Length != vector2.Length) throw new Exception("DIFFER LENGTH ARE NOT ALLOWED"); float result=0F; for (int i=0; i < vector1.Length; i++) result += vector1[i] * vector2[i]; return result; } public static float VectorLength(float[] vector) { float sum=0.0F; for (int i=0; i < vector.Length; i++) sum=sum + (vector[i] * vector[i]); return (float)Math.Sqrt(sum); } } private IDictionary _wordsIndex=new Hashtable() ; public TFIDFMeasure(string[] documents) { _docs=documents; _numDocs=documents.Length ; MyInit(); } private void GeneratNgramText() { } private ArrayList GenerateTerms(string[] docs) { ArrayList uniques=new ArrayList() ; _ngramDoc=new string[_numDocs][] ; for (int i=0; i < docs.Length ; i++) { Tokeniser tokenizer=new Tokeniser() ; string[] words=tokenizer.Partition(docs[i]); for (int j=0; j < words.Length ; j++) if (!uniques.Contains(words[j]) ) uniques.Add(words[j]) ; } return uniques; } private static object
<think>好的,我需要帮助用户了解如何在C#中将JSON字符串换为List<string>。首先,我应该确认用户的需求是处理JSON数组,也就是字符串数组的序列化和反序列化。 首先想到的是使用C#中常用的Newtonsoft.Json库,也就是Json.NET,这是比较传统的方法。需要确保用户已经安装了这个库,可以通过NuGet包管理器来安装。然后,代码的大致步骤应该是使用JsonConvert.DeserializeObject<List<string>>(jsonString)来进行反序列化。不过,需要提醒用户处理可能的异常,比如JSON格式不正确的情况。 另外,现在.NET Core和.NET 5+默认使用System.Text.Json,所以也应该介绍这种方法。用户可能需要了解新的API,比如JsonSerializer.Deserialize<List<string>>(jsonString)。这里要注意,System.Text.Json的API和Newtonsoft有一些不同,比如是否需要JsonSerializerOptions,默认是否区分大小写等。 需要注意两种情况下的代码示例是否准确。比如,使用System.Text.Json时是否需要将jsonString换为byte数组并使用Utf8JsonReader?或者直接使用JsonSerializer.Deserialize就可以了?可能需要查证一下,避免给出错误代码。 另外,是否需要处理可能的空引用问题?比如,如果jsonString是null或者空字符串,应该怎么处理?用户可能需要知道添加适当的判断,避免程序崩溃。 还有,如果JSON字符串中的元素不是字符串型,换时会不会抛出异常?例如,如果数组里包含数字或者其他型,反序列化到List<string>会失败。这时候是否需要提醒用户确保JSON结构匹配? 最后,应该给出完整的代码示例,包括必要的using指令,比如using Newtonsoft.Json;或者using System.Text.Json;,确保用户可以直接复制代码使用。 可能还需要比较两种方法的优缺点,比如Newtonsoft更灵活,而System.Text.Json性能更好,但功能可能较少。用户可以根据项目需求选择合适的库。 总结下来,回答的结构应该是先介绍两种方法,分别给出代码示例,并指出注意事项,如异常处理、库的引用等。确保用户能够清晰理解每一步操作,并且能够顺利应用到实际项目中。</think>在C#中将JSON字符串换为`List<string>`有两种常用方法,以下是详细步骤和示例: ### 方法1:使用 Newtonsoft.Json (Json.NET) 1. **安装NuGet包** 在项目中右键点击引用 → 管理NuGet程序包 → 搜索安装 `Newtonsoft.Json` 2. **代码实现** ```csharp using Newtonsoft.Json; string jsonString = "[\"苹果\", \"香蕉\", \"橙子\"]"; try { List<string> list = JsonConvert.DeserializeObject<List<string>>(jsonString); foreach (var item in list) { Console.WriteLine(item); } } catch (JsonException ex) { Console.WriteLine($"解析失败: {ex.Message}"); } ``` ### 方法2:使用 System.Text.Json (.NET Core 3.0+ 原生支持) ```csharp using System.Text.Json; string jsonString = "[\"北京\", \"上海\", \"广州\"]"; try { List<string> list = JsonSerializer.Deserialize<List<string>>(jsonString); foreach (var item in list) { Console.WriteLine(item); } } catch (JsonException ex) { Console.WriteLine($"解析失败: {ex.Message}"); } ``` ### 注意事项: 1. **JSON格式验证** 确保输入字符串是有效的JSON数组格式,例如:`["元素1","元素2"]` 2. **空值处理建议** ```csharp // 处理空字符串或null情况 if (!string.IsNullOrEmpty(jsonString)) { // 执行换 } ``` 3. **性能对比** - Newtonsoft.Json:功能全面,支持复杂场景 - System.Text.Json:性能更好,内存占用更低(推荐新项目使用) 4. **特殊字符处理** 如果字符串包含特殊字符(如引号),需确保JSON已正确义: ```json ["带\"引号\"的文本", "换行\n文本"] ``` 实际开发中建议根据项目需求选择解析库,新项目优先考虑System.Text.Json以获得更好的性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值