• String.Fomat/String.Split/String.Join用法


    String.Fomat:格式化字符串

    1、可以用作顶替字符串用,作为参数。Format(String,Object)将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项。其实就是方便的一个一个赋值。

        //将数组m格式化为字符串abc

        int m[]=new int{a,b,c,d};

        string.Format("{0}{1}{2}",m);

        //将oldstring的值作为mystring的值

        string.Fomat"mystring,oldstring);

    2、string.format用来格式化字符串(按指定的规则连接字符串或输出其他变量并返回新的字符串) 

        

    字符

    说明

    示例

    输出

    C 货币 string.Format("{0:C3}", 2) $2.000
    D 十进制 string.Format("{0:D3}", 2) 002
    E 科学计数法 1.20E+001 1.20E+001
    G 常规 string.Format("{0:G}", 2) 2
    N 用分号隔开的数字 string.Format("{0:N}", 250000) 250,000.00
    X 十六进制 string.Format("{0:X000}", 12) C
        string.Format("{0:000.000}", 12.2) 012.200

    string.format用来格式化字符串(按指定的规则连接字符串或输出其他变量并返回新的字符串) 。
    string.format(fm,...);
    第一个参数用fm表示输出的格式,每个%符号后面是一个格式化表达式,每个格式化表达式按顺序对应后面的参数。
    所以用了N个格式化表达式,就必须在后面添加N个参数。

    下面是一个简单的例子:

    int = 123;
    str = "字符串"

    --下面的%s对应参数str, %i对应参数int
    str = string.format("这是字符串:'%s' 这是数字值 %i",str,int);

    win.messageBox(str);

    --%05i表示格式化为至少五位的数字,不足在前面补0
    str = string.format("%05i",int);
    win.messageBox(str);
     

    格式化表达式:%[零个或多个标志][最小字段宽度][精度][修改符]格式码

    注意:[]方括号表示可选参数

    1、格式码

    代码 c
    参数 数字值(number) 
    含义 参数被裁剪为8位字节码并作为字符进行打印。

    代码 i,d
    参数 数字值(number) 
    含义 参数作为一个十进制整数打印。如果给出了精度而且值的位数小于精度位数,前面就用0填充。

    代码 u,o,x,X
    参数 数字值(number) 
    含义 参数作为一个无符号数字值打印,u使用十进制,o使用八进制,x或X使用十六进制,两者的区别是x约定使用abcdef,而X约定使用ABCDEF。

    代码 e,E
    参数 数字值(number) 
    含义 参数根据指数形式打印。例如,6.023000e23是使用代码e,6.023000E23是使用代码E。小数点后面的位数由精度字段决定,缺省值是6。

    代码 f
    参数 数字值(number) 
    含义 参数按照的常规浮点格式打印。精度字段决定小数点后面的位数,缺省值是6。

    代码 g,G
    参数 数字值(number) 
    含义 参数以%f或%e(如G则%E)的格式打印,取决于它的值。如果指数大于等于-4但小于精度字段就使用%f格式,否则使用指数格式。

    代码 s
    参数 字符串值(string) 
    含义 打印一个字符串。

    代码 q 
    参数 (无)
    含义 打印一个字符串,并将字符串置于一对引号中,如果字符串中包含引号换行等自动添加转义符。如果要读取一个字符串传为脚本代码。为避免用户恶意注入引号等特殊字符,可以使用%q进行格式化。

    代码 %
    参数 (无)
    含义 取消%转义打印一个%字符,即用%%表示本来的%。

    2、 标志

    标志 -
    含义 值在字段中做对齐,缺省情况下是右对齐。

    标志 0
    含义 当数值为右对齐时,缺省情况下是使用空格填充值左边未使用的列。这个标志表示用零填充,它可用于d,i,u,o,x,X,e,E,f,g和G代码。
    使用d,i,u,o,x和X代码时,如果给出了精度字段,零标志就被忽略。如果格式代码中出现了负号,零标志也没有效果。

    标志 +
    含义 当用于一个格式化某个有符号值代码时,如果值非负,正号标志就会给它加上一个正号。如果该值为负,就像往常一样显示一个负号。在
    缺省情况下,正号并不会显示。

    标志 空格
    含义 只用于转换有符号值的代码。当值非负时,这个标志把一个空格添加到它开始的位置。注意这个标志和正号标志是相互排斥的,如果两个
    同时给出,空格标志便被忽略。

    标志 #
    含义 选择某些代码的另一种转换形式:

    用于... #标志...
    o 保证产生的值以一个零开头
    x,X 在非零值前面加0x前缀(%X则为0X)
    e,E,f 确保结果始终包含一个小数点,即使它后面没有数字
    g,G 和上面的e,E和f代码相同。另外,缀尾的0并不从小数中去除

    3、 字段宽度

    字段宽度是一个十进制整数,用于指定将出现在结果中的最小字符数。如果值的字符数少于字段宽度,就对它进行填充以增加长度。

    4、 精度

    精度以一个句点开头,后面跟一个可选的十进制数。如果未给出整数,精度的缺省值为零。

    对于d,i,u,o,x和X类型的转换,精度字段指定将出现在结果中的最小的数字个数并覆盖零标志。如果转换后的值的位数小于宽度,就在它的前面插入零。如果值为零且精度也为零,则转换结果就不会产生数字。

    对于e,E和f类型的转换,精度决定将出现在小数点之后的数字位数。

    对于g和G类型的转换,它指定将出现在结果中的最大有效位数。

    当使用s类型的转换时,精度指定将被转换的最多的字符数。

    如果用于表示字段宽度和/或精度的十进制整数由一个星号代替,那么printf的下一个参数(必须是个整数)就提供宽度和(或)精度。因此,
    这些值可以通过计算获得而不必预先指定。

    5、示例

    格式代码 A ABC ABCDEFGH 
    %s A ABC ABCDEFGH 
    %5s ####A ##ABC ABCDEFGH 
    %.5s A ABC ABCDE 
    %5.5s ####A ##ABC ABCDE 
    %-5s A#### ABC## ABCDEFGH

    格式代码 1 -12 12345 123456789 
    %d 1 -12 12345 123456789 
    %6d #####1 ###-12 #12345 123456789 
    %.4d 0001 -0012 12345 123456789 
    %6.4d ##0001 #-0012 #12345 123456789 
    %-4d 1#### -12# 12345 123456789 
    %04d 0001 -012 12345 123456789 
    %+d +1 -12 +12345 +123456789

    格式代码 1 .01 .00012345 12345.6789 
    %f 1.000000 0.010000 0.000123 12345.678900 
    %10.2d ######1.00 #####0.01 ######0.00 ##12345.67 
    %e 1.000000e+00 1.000000e-02 1.234500e-04 1.234568e+04 
    %.4e 1.0000e+00 1.0000e-02 1.2345e-04 1.2346e+04 
    %g 1 0.01 0.00012345 12345.7

    格式代码 6.023e23 
    %f 60229999999999975882752.000000 
    %10.2e 60229999999999975882752.00 
    %e 6.023000e+23 
    %.4e 6.0230e+23 
    %g 6.023e+23

    用上面的格式化函数可以轻松实现数字的进制转换

    --数字转换为二进制字符串
    str = string.format("%b",23 );

    --二进制字符串转换为数字
    n = tonumber(str,2)

    --数字转换为八进制字符串
    str = string.format("%o",23 );

    --八进制字符串转换为数字
    n = tonumber(str,8)

    --数字转换为十六进制字符串
    str = string.format("%x",23 );

    --十六进制字符串转换为数字
    n = tonumber(str,16)

    四、格式化时间
    模拟精灵v7.10 格式化时间的函数有 string.time;string.ftime;os.data;os.time 等函数。
    os.time 是从table生成数字时间值 string.time是从字符串生成数字时间值。
    os.data 与string.ftime功能相同从时间值反过来生成字符串或时间。


    这里我们介绍string.time函数、string.ftime函数,下面是使用示例:


    --从字符串创建时间值
    t = string.time("2006/6/6 0:0:0","%Y/%m/%d %H:%M:%S")

    --从时间值创建字符串
    str = string.ftime("%Y/%m/%d %H:%M:%S",t )

    格式化语法(在很多编程语言中都适用的语法)


    %a - 当前区域星期几的简写
    %A - 当前区域星期几的全称
    %b - 当前区域月份的简写
    %B - 当前区域月份的全称
    %c - 当前区域首选的日期时间表达
    %C - 世纪值(年份除以 100 后取整,范围从 00 到 99)
    %d - 月份中的第几天,十进制数字(范围从 01 到 31)
    %D - 和 %m/%d/%y 一样
    %e - 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ' 1' 到 '31')
    %g - 和 %G 一样,但是没有世纪
    %G - 4 位数的年份,符合 ISO 星期数(参见 %V)。和 %V 的格式和值一样,只除了如果 ISO 星期数属于前一年或者后一年,则使用那一年。
    %h - 和 %b 一样
    %H - 24 小时制的十进制小时数(范围从 00 到 23)
    %I - 12 小时制的十进制小时数(范围从 00 到 12)
    %j - 年份中的第几天,十进制数(范围从 001 到 366)
    %m - 十进制月份(范围从 01 到 12)
    %M - 十进制分钟数
    %n - 换行符
    %p - 根据给定的时间值为 `am' 或 `pm',或者当前区域设置中的相应字符串
    %r - 用 a.m. 和 p.m. 符号的时间
    %R - 24 小时符号的时间
    %S - 十进制秒数
    %t - 制表符
    %T - 当前时间,和 %H:%M:%S 一样
    %u - 星期几的十进制数表达 [1,7],1 表示星期一
    %U - 本年的第几周,从第一周的第一个星期天作为第一天开始
    %V - 本年第几周的 ISO 8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。)
    %W - 本年的第几周数,从第一周的第一个星期一作为第一天开始
    %w - 星期中的第几天,星期天为 0
    %x - 当前区域首选的时间表示法,不包括时间
    %X - 当前区域首选的时间表示法,不包括日期
    %y - 没有世纪数的十进制年份(范围从 00 到 99)
    %Y - 包括世纪数的十进制年份
    %Z - 时区名或缩写
    %% - 文字上的 `%' 字符

    String.Join:指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串。

    1、String str1 = "*;|@123***456@|;*";

         String delim = "*;|@";
         String str2 = String.Join("" ,str1.Split(delim.ToCharArray()));

         this.TestInfo.Text += String.Format("Delimiters: {0},Len={1}/r/n", delim ,delim.Length);
         this.TestInfo.Text += String.Format("Original string: {0},Len={1}/r/n", str1 ,str1.Length);
         this.TestInfo.Text += String.Format("Trimmed string: {0},Len={1}/r/n", str2 ,str2.Length);

         结果如下:
         Delimiters:      *;|@,Len=4
         Original string: *;|@123***456@|;*,Len=17
         Trimmed string:  123456,Len=6

         String.Join(seprater, string [] value) 注意它的两个参数  应该一个是分隔符一个是数组名字,它的作用就是把数组里的各个数组段利用 分隔符组合成一个字符串。通过上面的例子我们也可以看到它利用空格 把整个数组的内容组合成了一个。String.Concat也可以将一个数组的元素连接成为一个字符串,但是它和String.Join的区别显而易见的String.Join可以添加自己的连接符 如 a+b+c  String.Concat单纯的只是连接        如  abc 

    3、String.Split:分割字符串

         string s = "A|B|:|C:D";将它分格使用|:|将字符串分开的, 得到数组: A|B 和 C:D”。

         string[] ss1 = s.Split(new[] {"|:|"}, StringSplitOptions.None);

         后一个参数是标志是否自动remove empty的数据例如: "A|B|:|C:D|:|" 做分割时会返回三个数组该数组的最后一个元素是空""如果我们想过滤掉这些空的元素可以使用参数: StringSplitOptions.RemoveEmptyEntries string[] ss1s.Split(new[] {"|:|"}, StringSplitOptions.RemoveEmptyEntries);例如:

                s = "A|B|:|C:D|:|";
                string[] ss1 = s.Split(new[] {"|:|"}, StringSplitOptions.RemoveEmptyEntries);
                //ss1[0]: "A|B"
                //ss1[1]: "C:D"

                ss1 = s.Split(new[] { "|:|" }, StringSplitOptions.None);
                //ss1[0]: "A|B"
                //ss1[1]: "C:D"
                //ss1[2]: ""

    首先我们看下String.Split 方法有6个重载函数:

    1) public string[] Split(params char[] separator)
    2) public string[] Split(char[] separator, int count)
    3) public string[] Split(char[] separator, StringSplitOptions options)
    4) public string[] Split(string[] separator, StringSplitOptions options)
    5) public string[] Split(char[] separator, int count, StringSplitOptions options)
    6) public string[] Split(string[] separator, int count, StringSplitOptions options)
    下边我们通过一些实例来说明下怎么使用(以下string words = "1,2.3,,4";):

    1. public string[] Split(params char[] separator)
     
    string[] split = words.Split(new Char[] { ',' });//返回:{"1","2.3","","4"}
    string[] split = words.Split(new Char[] { ',', '.' });//返回:{"1","2","3","","4"}

    2. public string[] Split(char[] separator, int count)
     
    string[] split = words.Split(new Char[] { ',', '.' }, 2);//返回:{"1","2.3,,4"}
    string[] split = words.Split(new Char[] { ',', '.' }, 6);//返回:{"1","2","3","","4"}

    3. public string[] Split(char[] separator, StringSplitOptions options)
     
    string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
    string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素

    4. public string[] Split(string[] separator, StringSplitOptions options)
     
    string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
    string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素

    5. public string[] Split(char[] separator, int count, StringSplitOptions options)
     
    string[] split = words.Split(new Char[] { ',', '.' }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
    string[] split = words.Split(new Char[] { ',', '.' }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素

    6. public string[] Split(string[] separator, int count, StringSplitOptions options)
     
    string[] split = words.Split(new string[] { ",", "." }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
    string[] split = words.Split(new string[] { ",", "." }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素

    个人理解:Split 就是和String.Join相反的一个函数 它的作用是把一个字符串分隔成含有多个字段的数组
    我现在只对上面的一种方法进行分析:
    string[] split = words.Split(new Char[] { ',', '.' }, 6);//返回:{"1","2","3","","4"}
    为什么返回的有了个空的“” 呢,自己当时也是不理解
    其实它就是以" , " 和“ . " 两个分隔符来拆分 字符串 1,2.3,,4的 当找到 3 后面的第一个”, “ 时候说明此处要分开了
    但是它后面又是一个分隔符 ”, " 怎么办呢 这是就只能当成 " " 空来处理了  你可以变相的把  1,2.3,,4连续的两个" , "间 认为有个空格符“ “也可以。不对的地方请大家帮指出来 不胜感激 。
  • 相关阅读:
    Java复习笔记8--内部类
    Java复习笔记7--Java封装
    Java复习笔记6--Final&Static
    Java复习笔记5--equals方法总结
    Java复习笔记4--实现多重继承
    Java复习笔记3--强制类型转换
    Java复习笔记2--匿名类和多态
    python版本管理--pyenv
    gensim自然语言处理(续)
    gensim自然语言处理
  • 原文地址:https://www.cnblogs.com/d685600/p/3683286.html
Copyright © 2020-2023  润新知