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


相关文章
|
1月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
1月前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
1月前
|
存储 C# 数据库
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
161 0
|
3月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
3月前
|
C# 开发者
C# 10.0引入常量插值字符串:编译时确定性的新篇章
【1月更文挑战第22天】在C# 10.0中,微软为开发者带来了一项引人注目的新特性——常量插值字符串。这一功能允许在编译时处理和计算字符串插值表达式,从而得到可以在编译时确定的常量字符串。本文将深入探讨C# 10.0中常量插值字符串的概念、工作原理、使用场景及其对现有字符串处理方式的改进,旨在帮助读者更好地理解和应用这一强大的新特性。
|
3月前
|
编译器 C# 开发者
C# 10.0中插值字符串的改进:灵活性与性能的双重提升
【1月更文挑战第19天】C# 10.0带来了对插值字符串的显著改进,进一步增强了这一功能的灵活性和性能。插值字符串是C#中处理字符串格式化的一种强大方式,它允许开发者直接在字符串中嵌入变量和表达式。在C# 10.0中,插值字符串不仅获得了语法上的简化,还通过新的编译时优化提高了运行时性能。本文将详细探讨C# 10.0中插值字符串的改进内容,以及这些改进如何为开发者带来更加高效和便捷的编程体验。
|
3月前
|
安全 C# 开发者
C#中的默认接口方法:接口演化的新篇章
【1月更文挑战第11天】本文探讨了C# 8.0中引入的默认接口方法,这一特性允许在接口中定义具有默认实现的方法。文章介绍了默认接口方法的语法、使用场景,以及它们如何影响接口的设计和实现,同时讨论了默认接口方法带来的好处和潜在的陷阱。
|
1月前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
|
1月前
|
开发框架 .NET C#
C#学习相关系列之Linq常用方法---排序(一)
C#学习相关系列之Linq常用方法---排序(一)
|
1月前
|
开发框架 .NET 编译器
C#学习相关系列之匿名方法和Lambda表达式
C#学习相关系列之匿名方法和Lambda表达式