zoukankan      html  css  js  c++  java
  • 字符串

    一、StringComparison

    1,出于编程目的而比较字符串时,应该总数使用StringComparison.Ordinal或者StringComparison. OrdinalIgnoreCase。忽略语言文化是字符串比较最快的方式

    2,要以语言文化正确的方式来比较字符串(通常为了向用户显示),就应该使用StringComparison. CurrentCulture或者StringComparison. CurrentCultureIgnoreCase

    3,StringComparison. InvariantCulture和StringComparison. InvariantCultureIgnoreCase平时最好不要用

    二、CultureInfo

    在CLR中,每个线程都关联了两个特殊属性,每个属性都引用一个CultureInfo对象。两个属性的具体描述如下

    1,CurrentUICulture属性:该属性获取向用户显示的资源。它在GUI或Web窗体应用程序中特别有用,因为他标志了在显示UI元素(比如标签和按钮)时应使用的语言。创建线程时,这个线程属性会被设置成一个默认的CultureInfo对象,该对象标识了正在运行时应用程序的Windows版本所用的语言。而这个语言使用Win32函数GetUserDefaultUILanguage来获取的。如果应用程序在Windows的MUI(多语言用户界面)版本上运行,可通过控制面板的“区域和语言”对话框来修改语言。在非MUI版本的Windows上,语言有安装的操作系统的本地化版本(或安装的语言包)决定,而且这个语言不可更改

    2,CurrentCulture属性:不适合用CurrentUICulture属性场合就该用该属性,例如数字和日期格式化、字符串大小写转换以及字符串比较。格式化要同时用到CultureInfo对象的“语言”和“国家”部分。创建线程时,这个线程属性被设置为一个默认的CultureInfo对象,其之通过调用Win32函数GetUserDefaultLCUID来获取。可通过Windows控制面板的“区域或语言”对话框来修改这个值

    三。字符串留用

    程序集加载时,CLR默认留用程序集的元数据中描述的所有字面值字符串。4.5版本以上会进行留用

            static void Main(string[] args)
            {
                
                var s = "Hello";
                var ss = "Hello";
                //Console.WriteLine(string.IsInterned(ss)); //如果该字符已经留用,则返回对这个留用字符串对象的引用;没有留用,则返回null
                //Console.WriteLine(string.Intern(ss)); //如果该字符串已经留用,则返回对这个留用字符串对象的引用;没有留用,则留用
                //Console.ReadKey();
    
                Console.WriteLine(Object.ReferenceEquals(s,ss));//Ture
    
                //显示留用
                s = string.Intern(s);
                ss = string.Intern(ss);
                Console.WriteLine(Object.ReferenceEquals(s, ss));//Ture
                Console.ReadKey();
            }

    四、字符串池

    编译源代码时,编译器必须处理每个字面值字符串,斌仔托管模块的元数据中嵌入。同一个字符串在源代码中多次出现,把它们都嵌入元数据会使生成的文件无畏地增大。为了解决这个问题,许多编译器(包括c#编译器)只在模块的元数据中只将字面值字符串写入一次

    五、StringBuilder

    StringBuilder代表可变字符串
    StringBuilder只有以下两种情况才会分配新对象:
    ①动态构造字符串,其长度超过了设置的“容量”
    ②调用StringBuilder的ToString方法

    六、IFormattable

    format:这个特殊字符串告诉方法应该如何格式化对象
    formatProvider:实现了system. IFormatProvider接口的一个类型的实例,该类型微ToString方法提供具体的语言文化信息
    1,Datetime
    d:短日期
    D:长日期
    g:常规
    M:月/日
    s:可排序
    T:长时间
    u:ISO 8601格式的协调世界时
    U:长日期格式的协调世界时
    Y:年/月
    所有的枚举类型都支持用G表示常规,F表示标志,D表示十进制,X表示十六进制

    2,数值类型
    C:货币格式
    D:十进制格式
    E:科学计数法(指数)格式
    F:定点格式
    N:数字格式
    P:百分比格式
    R:往返行程格式

    3,IFormatProvider

     

    学习永不止境,技术成就梦想。
  • 相关阅读:

    logging 模块和日志
    re 模块和正则表达式
    collections 模块
    hashlib 模块
    序列化 json 和 pickle
    C++之以分隔符的形式获取字符串
    读取配置文件所在路径时的一种常见错误
    char和achar互转
    C++之ARX,Acstring,ACahr转char
  • 原文地址:https://www.cnblogs.com/zd1994/p/6803794.html
Copyright © 2011-2022 走看看