c#中去掉字符串空格方法

简介: 一、案例问题现场     你拿一个带有空格(\0)的字符串如果去给Form上的label或TextEdit赋值时,常常会出现下面的问题: 案例1、 string str = "I\0am\0super\0man";...

一、案例问题现场

    你拿一个带有空格(\0)的字符串如果去给Form上的label或TextEdit赋值时,常常会出现下面的问题:

案例1、


  1. string str = "I\0am\0super\0man";
  2. Label lbl = new Label();
  3. lbl.Text = str;
  4. Console.WriteLine("{0}", lbl.Text);
  5. MessageBox.Show(" " + lbl.Text + " ");


image图1

    图1 ,将一个带有空格\0的字符串赋给一个label的text,再对这个label的控制台输出和Form输出比较:

    明显Form形式的输出遇到\0就把后面的字符串断开了,而控制能输出则能完整输出。

案例2、


  1. string str = "Test";
  2. string str2 = "\0of\0file";
  3. str = str + str2;

  4. label1.Text = str;
  5. textBox1.Text = str;
  6. Console.WriteLine("1111---------{0}\n", textBox1.Text);
  7. Console.WriteLine("2222---------{0}\n", label1.Text);


image 图2

image

图3

    图1 ,将一个没有空格的字符串与一个带有空格\0的字符串相加,从控制台与Form的输出可以看到:

    Form的输出,遇到\0就把后面的字符串断掉了;控制台除此外,第二个Console.WriteLine都不见了!

 

二、解决方案

(1)Trim方法


  1. string tt=" aaa ";
  2. tt=tt.Trim() 去字符串首尾空格的函数
  3. tt=tt.TrimEnd() 去掉字符串尾空格
  4. tt=tt.TrimStart() 去掉字符串首空格

(2)通过ASCII码值去掉字符中的空格


    由于空格的ASCII码值是32,因此,在去掉字符串中所有的空格时,只需循环访问字符串中的所有字符,并判断它们的ASCII码值是不是32即可。去掉字符串中所有空格的关键代码如下:


  1. CharEnumerator CEnumerator = textBox1.Text.GetEnumerator();

  2. while (CEnumerator.MoveNext())
  3. {
  4.     byte[] array = new byte[1];
  5.     array = System.Text.Encoding.ASCII.GetBytes(CEnumerator.Current.ToString());
  6.     int asciicode = (short)(array[0]);
  7.     if (asciicode != 32)
  8.     {
  9.         textBox2.Text += CEnumerator.Current.ToString();
  10.     }
  11. }


    这里的方法只能去除半角空格,不能去除全角空格


(3)Replace方法

    使用字符串自带的Replace方法:str.Replace(" ","")-------------  str是输入或要检测的字符串。注意第二个是"",中间没有空格的!


  1.     string afterConverStr = "?!0\0cp";
  2.     textBox2.Text = afterConverStr.Replace("\0","");

图3

#的Replace函数,有关它的参数需要注意:

    如果它的参数是一个表达式,系统会先计算表达式做预处理,再执行替换操作。

  比如(GetNameByID为一个函数):


  1.     String strSource="这是一个示例";
  2.     strSource=strSource.Replace("姓名",GetNameByID(1));


      很显然,strSource是不包含“姓名”的,所以也不会执行任何替换。但是,每执行一次这行替换代码,GetNameByID都会被调用一次。如果GetNameByID是更复杂的逻辑,或者是替换操作在一个循环中,将会极大地影响系统效率。

      建议修改为:


  1.     if(strSource.IndexOf("姓名")>-1)
  2.     {
  3.           strSource=strSource.Replace("姓名",GetNameByID(1));
  4.     }




参考文献
http://blog.csdn.net/dyufei/article/details/5420407


相关文章
|
4天前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
16天前
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
|
3天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
102 65
|
1天前
|
C#
C#的方法的参数传递
C#的方法的参数传递
6 0
|
1天前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
5 0
|
1月前
|
C#
C#一分钟浅谈:Lambda 表达式和匿名方法
本文详细介绍了C#编程中的Lambda表达式与匿名方法,两者均可用于定义无名函数,使代码更简洁易维护。文章通过基础概念讲解和示例对比,展示了各自语法特点,如Lambda表达式的`(parameters) => expression`形式及匿名方法的`delegate(parameters)`结构。并通过实例演示了两者的应用差异,强调了在使用Lambda时应注意闭包问题及其解决策略,推荐优先使用Lambda表达式以增强代码可读性。
31 8
|
25天前
|
前端开发 C#
C# 一分钟浅谈:字符串操作与正则表达式
本文详细介绍C#中的字符串操作与正则表达式应用,涵盖字符串拼接、分割、查找及替换等基础操作,并通过实例讲解正则表达式的模式匹配、文本替换与分组捕获技巧。同时,文章还探讨了性能优化、复杂度管理和安全性等问题及解决策略,助你提升编程效率,应对实际开发挑战。
54 0
|
2月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
48 0
|
2月前
|
C#
C# async await 异步执行方法
C# async await 异步执行方法
45 0
|
5月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
171 3