GVKun编程网logo

使用.format()格式化带有字段宽度参数的列表(格式化字符串中可以包含用户输入吗)

9

最近很多小伙伴都在问使用.format和格式化带有字段宽度参数的列表这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展DateFormat(日期格式化)、DecimalFormat.

最近很多小伙伴都在问使用.format格式化带有字段宽度参数的列表这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Date Format(日期格式化)、DecimalFormat.format()的更快替代方法?、Delphi格式化函数Format、FormatDateTime和FormatFloat、Delphi格式化函数Format、FormatDateTime和FormatFloat详解等相关知识,下面开始了哦!

本文目录一览:

使用.format()格式化带有字段宽度参数的列表(格式化字符串中可以包含用户输入吗)

使用.format()格式化带有字段宽度参数的列表(格式化字符串中可以包含用户输入吗)

我最近(终于?)开始使用.format()它,对此可能有一个模糊的问题。

给定

res = [''Irene Adler'', 35,  24.798]

(1) print(''{0[0]:10s} {0[1]:5d} {0[2]:.2f}''.format(res))(2) print(''{:{}s} {:{}d} {:{}f}''.format(res[0], 10, res[1], 5, res[2], .2))

工作出色,并且都可以打印:

Irene Adler    35 24.80Irene Adler    35 24.80

我不知道我可以像(1)中那样处理列表,这很简洁。我以前曾经看过关于字段宽度参数(2)的旧%格式。

我的问题是想要做这样的事情,将(1)和(2)结合起来:

(3) print(''{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}''.format(res, 10, 5, .2))

但是,我无法做到这一点,即使有可能,我也无法从文档中找出答案。只需提供要打印的列表以及width参数即可。

顺便说一句,我也尝试过这个(没有运气):

args = (10, 5, .2)(4) print(''{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}''.format(res, args))

在这两种情况下,我得到:

D:\Users\blabla\Desktop>python tmp.pyTraceback (most recent call last):  File "tmp.py", line 27, in <module>    print(''{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}''.format(res, 10, 5, .2))ValueError: cannot switch from manual field specification to automatic field numberingD:\Users\blabla\Desktop>python tmp.pyTraceback (most recent call last):  File "tmp.py", line 35, in <module>    print(''{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}''.format(res, args))ValueError: cannot switch from manual field specification to automatic field numbering

我也尝试使用zip()合并两个序列而没有运气。

我的问题是:

我可以指定要进行有效打印的列表,以完成在(3)和(4)中尝试执行的操作吗(显然,如果可能的话,我使用的语法不正确),如果可以,如何执行?

答案1

小编典典

错误讯息

ValueError: cannot switch from manual field specification to automatic field numbering

几乎说明了一切:您需要在任何地方提供明确的字段索引,并且

print(''{0[0]:{1}s} {0[1]:{2}d} {0[2]:{3}f}''.format(res, 10, 5, .2))

工作良好。

Date Format(日期格式化)

Date Format(日期格式化)

方法一

    // 对Date的扩展,将 Date 转化为指定格式的String   
    // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,   
    // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)   
    // 例子:   
    // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423   
    // (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18   
    Date.prototype.Format = function(fmt)   
    { //author: meizz   
      var o = {   
        "M+" : this.getMonth()+1,                 //月份   
        "d+" : this.getDate(),                    //日   
        "h+" : this.getHours(),                   //小时   
        "m+" : this.getMinutes(),                 //分   
        "s+" : this.getSeconds(),                 //秒   
        "q+" : Math.floor((this.getMonth()+3)/3), //季度   
        "S"  : this.getMilliseconds()             //毫秒   
      };   
      if(/(y+)/.test(fmt))   
        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));   
      for(var k in o)   
        if(new RegExp("("+ k +")").test(fmt))   
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
      return fmt;   
    }  

方法二

<mce:script language="<a href="http://lib.csdn.net/base/javascript"replace_word'' title="JavaScript知识库" target=''_blank''color:#df3434; font-weight:bold;''>JavaScript</a>" type="text/javascript"><!--  
        
/**       
 * 对Date的扩展,将 Date 转化为指定格式的String       
 * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符       
 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)       
 * eg:       
 * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423       
 * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04       
 * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04       
 * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04       
 * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18       
 */          
Date.prototype.pattern=function(fmt) {           
    var o = {           
    "M+" : this.getMonth()+1, //月份           
    "d+" : this.getDate(), //日           
    "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时           
    "H+" : this.getHours(), //小时           
    "m+" : this.getMinutes(), //分           
    "s+" : this.getSeconds(), //秒           
    "q+" : Math.floor((this.getMonth()+3)/3), //季度           
    "S" : this.getMilliseconds() //毫秒           
    };           
    var week = {           
    "0" : "/u65e5",           
    "1" : "/u4e00",           
    "2" : "/u4e8c",           
    "3" : "/u4e09",           
    "4" : "/u56db",           
    "5" : "/u4e94",           
    "6" : "/u516d"          
    };           
    if(/(y+)/.test(fmt)){           
        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));           
    }           
    if(/(E+)/.test(fmt)){           
        fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "/u661f/u671f" : "/u5468") : "")+week[this.getDay()+""]);           
    }           
    for(var k in o){           
        if(new RegExp("("+ k +")").test(fmt)){           
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));           
        }           
    }           
    return fmt;           
}         
       
var date = new Date();        
window.alert(date.pattern("yyyy-MM-dd hh:mm:ss"));  
// --></mce:script>

方法三

Date.prototype.format = function(mask) {        
       
    var d = this;        
       
    var zeroize = function (value, length) {        
       
        if (!length) length = 2;        
       
        value = String(value);        
       
        for (var i = 0, zeros = ''''; i < (length - value.length); i++) {        
       
            zeros += ''0'';        
       
        }        
       
        return zeros + value;        
       
    };          
       
    return mask.replace(/"[^"]*"|''[^'']*''|/b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])/1?|[lLZ])/b/g, function($0) {        
       
        switch($0) {        
       
            case ''d'':   return d.getDate();        
       
            case ''dd'':  return zeroize(d.getDate());        
       
            case ''ddd'': return [''Sun'',''Mon'',''Tue'',''Wed'',''Thr'',''Fri'',''Sat''][d.getDay()];        
       
            case ''dddd'':    return [''Sunday'',''Monday'',''Tuesday'',''Wednesday'',''Thursday'',''Friday'',''Saturday''][d.getDay()];        
       
            case ''M'':   return d.getMonth() + 1;        
       
            case ''MM'':  return zeroize(d.getMonth() + 1);        
       
            case ''MMM'': return [''Jan'',''Feb'',''Mar'',''Apr'',''May'',''Jun'',''Jul'',''Aug'',''Sep'',''Oct'',''Nov'',''Dec''][d.getMonth()];        
       
            case ''MMMM'':    return [''January'',''February'',''March'',''April'',''May'',''June'',''July'',''August'',''September'',''October'',''November'',''December''][d.getMonth()];        
       
            case ''yy'':  return String(d.getFullYear()).substr(2);        
       
            case ''yyyy'':    return d.getFullYear();        
       
            case ''h'':   return d.getHours() % 12 || 12;        
       
            case ''hh'':  return zeroize(d.getHours() % 12 || 12);        
       
            case ''H'':   return d.getHours();        
       
            case ''HH'':  return zeroize(d.getHours());        
       
            case ''m'':   return d.getMinutes();        
       
            case ''mm'':  return zeroize(d.getMinutes());        
       
            case ''s'':   return d.getSeconds();        
       
            case ''ss'':  return zeroize(d.getSeconds());        
       
            case ''l'':   return zeroize(d.getMilliseconds(), 3);        
       
            case ''L'':   var m = d.getMilliseconds();        
       
                    if (m > 99) m = Math.round(m / 10);        
       
                    return zeroize(m);        
       
            case ''tt'':  return d.getHours() < 12 ? ''am'' : ''pm'';        
       
            case ''TT'':  return d.getHours() < 12 ? ''AM'' : ''PM'';        
       
            case ''Z'':   return d.toUTCString().match(/[A-Z]+$/);        
       
            // Return quoted strings with the surrounding quotes removed        
       
            default:    return $0.substr(1, $0.length - 2);        
       
        }        
       
    });        
       
};

 

DecimalFormat.format()的更快替代方法?

DecimalFormat.format()的更快替代方法?

为了提高其性能,我一直在使用VisualVM采样器对我的一个应用程序进行性能分析,最小采样周期为20ms。根据探查器,主线程在该DecimalFormat.format()方法中花费了将近四分之一的CPU时间。

我正在DecimalFormat.format()与该0.000000模式一起使用,以将double数字“转换”
为正好有六个十进制数字的字符串表示形式。我知道这种方法相对昂贵并且 多次调用,但是我对这些结果感到有些惊讶。

  1. 这种采样分析器的结果在多大程度上准确?我将如何验证它们-最好不借助仪器分析器?

  2. 有比DecimalFormat我的用例更快的替代方法吗?推出自己的NumberFormat子类是否有意义?

更新:

我创建了一个微基准测试来比较以下三种方法的性能:

  • DecimalFormat.format():单个DecimalFormat对象多次重复使用。

  • String.format():多个独立通话。在内部这种方法可以归结为

    public static String format(String format, Object ... args) {return new Formatter().format(format, args).toString();

    }

因此,我希望它的性能非常类似于Formatter.format()

  • Formatter.format():单个Formatter对象多次重复使用。

此方法有点尴尬-
Formatter使用默认构造函数创建的对象会将由该format()方法创建的所有字符串附加到内部StringBuilder对象,该内部对象无法正确访问,因此无法清除。结果,多次调用format()将创建所有结果字符串的
串联

要变通解决此问题,我提供了自己的StringBuilder实例,该实例在与setLength(0)呼叫一起使用之前已清除。

结果有趣之处:

  • DecimalFormat.format() 是每次通话1.4us时的基准。
  • String.format() 每次通话2.7us时速度降低了两倍。
  • Formatter.format() 在每次通话时以2.5us的速度降低了两倍。

目前看来,DecimalFormat.format()在这些替代方案中,它仍然是最快的。

答案1

小编典典

您可以编写自己的例程,只要您确切知道自己想要什么。

public static void appendTo6(StringBuilder builder, double d) {    if (d < 0) {        builder.append(''-'');        d = -d;    }    if (d * 1e6 + 0.5 > Long.MAX_VALUE) {        // TODO write a fall back.        throw new IllegalArgumentException("number too large");    }    long scaled = (long) (d * 1e6 + 0.5);    long factor = 1000000;    int scale = 7;    long scaled2 = scaled / 10;    while (factor <= scaled2) {        factor *= 10;        scale++;    }    while (scale > 0) {        if (scale == 6)            builder.append(''.'');        long c = scaled / factor % 10;        factor /= 10;        builder.append((char) (''0'' + c));        scale--;    }}@Testpublic void testCases() {    for (String s : "-0.000001,0.000009,-0.000010,0.100000,1.100000,10.100000".split(",")) {        double d = Double.parseDouble(s);        StringBuilder sb = new StringBuilder();        appendTo6(sb, d);        assertEquals(s, sb.toString());    }}public static void main(String[] args) {    StringBuilder sb = new StringBuilder();    long start = System.nanoTime();    final int runs = 20000000;    for (int i = 0; i < runs; i++) {        appendTo6(sb, i * 1e-6);        sb.setLength(0);    }    long time = System.nanoTime() - start;    System.out.printf("Took %,d ns per append double%n", time / runs);}

版画

Took 128 ns per append double

如果您想获得更高的性能,则可以写入直接的ByteBuffer(假设您想将数据写入某处),因此您产生的数据确实需要复制或编码。(假设还可以)

注意:这仅限于小于9万亿(Long.MAX_VALUE / 1e6)的正/负值。如果这可能是一个问题,则可以添加特殊处理。

Delphi格式化函数Format、FormatDateTime和FormatFloat

Delphi格式化函数Format、FormatDateTime和FormatFloat

总结

以上是小编为你收集整理的Delphi格式化函数Format、FormatDateTime和FormatFloat全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

Delphi格式化函数Format、FormatDateTime和FormatFloat详解

Delphi格式化函数Format、FormatDateTime和FormatFloat详解

1.Format 根据指定所需要的格式,格式化字符串。 原型: function Format(const Format: string const Args: array of const): string 例子:

var 
  s: string; 
begin 
  //指令类型 type 

  s := Format(''最大整数是: %d; 最小整数是: %d'',[MaxInt,Low(Integer)]); 
  //返回: 最大整数是: 2147483647; 最小整数是: -2147483648 
  { 提示: 格式指令必须以 % 开始, 不区分大小写, %d 代表一个整数; 第二个参数是一个变体数组 } 

  s := Format(''最大的无负号整数是: %u'',[High(Cardinal)]); 
  //返回: 最大的无负号整数是: 4294967295 
  { %u表示一个无负号整数 } 

  s := Format(''输入-2的结果是: %u'',[-2]); 
  //返回: 输入-2的结果是: 4294967294 
  { 如果对应 %u 的是个负数, 则返回: 无负号整数最大值 - 这个数的绝对值 + 1 } 

  s := Format(''%s! %s'',[''你好'',''我是万一'']); 
  //返回: 你好! 我是万一 
  { %s 表示字符串 } 

  s := Format(''%f'',[Pi]); 
  //返回: Pi的值是: 3.14 
  { %f 表示浮点数, 保留或凑够两位小数点 } 

  s := Format(''%g'',[01.2345000]); 
  //返回: 1.2345 
  { %g 表示浮点数, 会去掉多余的 0 } 

  s := Format(''%n'',[12345.6789]); 
  //返回: 12,345.68 
  { %n 表示浮点数, 整数部分使用千位分隔符, 保留两位小数点 } 

  s := Format(''%m'',[12345.6789]); 
  //返回: ¥12,345.68 
  { %m 表示浮点数, 加货币记号, 转换结果取决于系统的地域设置 } 

  s := Format(''%e'',[12345.6789]); 
  //返回: 1.23456789000000E+004 
  { %e 用科学计数法表示整数或浮点数 } 

  s := Format(''%p'',[@Self]); 
  //返回: 0012F5BC 
  { %p 表示指针地址, 用十六进制表示 } 

  s := Format(''%x'',[255]); 
  //返回: FF 
  { %x 用十六进制表示一个整数 } 

  //Index 

  s := Format(''%s%s'',['''','''']); 
  s := Format(''%0:s%1:s'',['''','''']); 
  //返回: 万一 
  { 上面两行的结果是一样的, 0: 对应数组中的第一个值; 1: 对应数组中的第二个值 } 

  s := Format(''%1:s%0:s'',['''','''']); 
  //返回: 一万 
  { 翻转了一下顺序 } 

  s := Format(''%1:s%0:s%0:s%1:s'',['''','''']); 
  //返回: 一万万一 
  { 反复使用 } 

  //Width 与对齐方式 

  s := Format(''%d,%8d,%d'',[1,2,3]); 
  //返回: 1,       2,3 
  { 给第二个值指定了8个字符的宽度, 缺少的用空格填充; 如果指定少了则无效 } 

  s := Format(''%d,%-8d,%d'',[1,2,3]); 
  //返回: 1,2       ,3 
  { - 表示左对齐, 默认是右对齐的; - 符号在 Width 前面、Index 后面 } 

  //指定精度 prec 

  s := Format(''%.9f'',[Pi]); 
  //返回: 3.141592654 
  { 指定小数点的位数, 取值范围1-9, 输入0也当1用 } 

  s := Format(''%.5d'',[12]); 
  //返回: 00012 
  { 这是给整数指定位数, 如果小了则无效 } 

  s := Format(''%.3s'',[''Format'']); 
  //返回: For 
  { 给字符串指定位数, 如果大了则无效 } 

  s := Format(''%.3e'',[123.456]); 
  //返回: 1.23E+002 
  { 给科学计数法指定位数 } 

  //指令顺序: 

  { "%" [index ":"] ["-"] [width] ["." prec] type } 

  ShowMessage(s); 
end;

2.FormatDateTime 格式化日期值 原型:

function FormatDateTime(const Format: string DateTime: TDateTime): string 例子:

var 
  s: string; 
begin 
  //FormatDateTime 的参数1是 String 格式指令, 参数2是 TDateTime 类型的时间 

  s := FormatDateTime(''c'', Now); {返回: 2007-12-18 23:56:05} 
  {指令 c 表示用短格式显示日期与时间} 

  s := FormatDateTime(''d'', Now); {返回: 19} 

  s := FormatDateTime(''d'', StrToDateTime(''2008-1-1'')); {返回: 1} 
  {d 表示日期} 

  s := FormatDateTime(''dd'', Now); {返回: 19} 

  s := FormatDateTime(''dd'', StrToDateTime(''2008-1-1'')); {返回: 01} 
  {dd 表示双位日期} 

  s := FormatDateTime(''ddd'', Now); {返回: 星期三} 

  s := FormatDateTime(''dddd'', Now); {返回: 星期三} 
  {ddd 与 dddd 表示星期; 可能对不同的语种会有区别} 

  s := FormatDateTime(''ddddd'', Now); {返回: 2007-12-19} 
  {ddddd 五个 d 表示短格式日期} 

  s := FormatDateTime(''dddddd'', Now); {返回: 2007年12月19日} 
  {dddddd 六个 d 表示长格式日期} 

  s := FormatDateTime(''e'', Now); {返回: 7} 
  {e 表示年, 1位} 

  s := FormatDateTime(''ee'', Now); {返回: 07} 
  {ee 表示年, 2位} 

  s := FormatDateTime(''eee'', Now); {返回: 2007} 

  s := FormatDateTime(''eeee'', Now); {返回: 2007} 
  {eee 与 eeee 返回4位数年} 

  s := FormatDateTime(''m'', Now); {返回: 12} 
  {m 表示月, 1位} 

  s := FormatDateTime(''mm'', StrToDateTime(''2008-1-1'')); {返回: 01} 
  {mm 表示月, 2位} 

  s := FormatDateTime(''mmm'', Now); {返回: 十二月} 

  s := FormatDateTime(''mmmm'', Now); {返回: 十二月} 
  {mmm 与 mmmm 表示长格式月} 

  s := FormatDateTime(''y'', Now); {返回: 07} 

  s := FormatDateTime(''yy'', Now); {返回: 07} 

  s := FormatDateTime(''yyy'', Now); {返回: 2007} 

  s := FormatDateTime(''yyyy'', Now); {返回: 2007} 
  {y yy yyy yyyy 表示年; 和 e 略有不同} 

  s := FormatDateTime(''t'', Now); {返回: 0:21} 

  s := FormatDateTime(''tt'', Now); {返回: 0:22:13} 
  {t tt 表示时间} 

  s := FormatDateTime(''ampm'', Now); {返回:  上午} 

  s := FormatDateTime(''tampm'', Now); {返回: 0:24 上午} 
  {ampm 表示上午、下午} 

  s := FormatDateTime(''h'', StrToDateTime(''2007-12-30 9:58:06'')); {返回: 9} 

  s := FormatDateTime(''hh'', StrToDateTime(''2007-12-30 9:58:06'')); {返回: 09} 
  {h hh 表示时} 

  s := FormatDateTime(''n'', StrToDateTime(''2007-12-30 9:58:06'')); {返回: 58} 

  s := FormatDateTime(''nn'', StrToDateTime(''2007-12-30 9:58:06'')); {返回: 58} 
  {n nn 表示分} 

  s := FormatDateTime(''s'', StrToDateTime(''2007-12-30 9:58:06'')); {返回: 6} 

  s := FormatDateTime(''ss'', StrToDateTime(''2007-12-30 9:58:06'')); {返回: 06} 
  {s ss 表示秒} 

  s := FormatDateTime(''z'', Now); {返回: 24} 

  s := FormatDateTime(''zz'', Now); {返回: 524} 

  s := FormatDateTime(''zzz'', Now); {返回: 524} 
  {z zz zzz 表示毫秒} 

  s := FormatDateTime(''yy/mm/dd'', Now); {返回: 07/12/19} 

  s := FormatDateTime(''yy/mm/dd'', Now); {返回: 07-12-19} 

  s := FormatDateTime(''yy-mm-dd'', Now); {返回: 07-12-19} 

  s := FormatDateTime(''yy*mm*dd'', Now); {返回: 07*12*19} 
  {使用分隔符, - 是默认的, / 是与 - 等效的, 假如我非要用 / 显示呢?} 

  s := FormatDateTime(''yy"/"mm"/"dd'', Now); {返回: 07/12/19} 

  s := FormatDateTime(''"当前时间是: "yyyy-m-d h:n:s:zz'', Now);  
  {返回: 当前时间是: 2007-12-19 0:47:16:576} 
  {混入的字符串要包含在双引号中} 

  ShowMessage(s); 
end;

3.FormatFloat 格式化浮点数 原型:

function FormatFloat(const Format: string Value: Extended): string 例子:

var 
  s: string; 
begin 
  //FormatFloat 的参数1是 String 格式指令, 参数2是实数类型 Extended 

  s := FormatFloat(''###.###'',12.3456); 
  //返回: 12.346 
  s := FormatFloat(''000.000'',12.3456); 
  //返回: 012.346 

  s := FormatFloat(''#.###'',12.3); 
  //返回: 12.3 
  s := FormatFloat(''0.000'',12.3); 
  //返回: 12.300 

  s := FormatFloat(''#,#.#'',1234567); 
  //返回: 1,234,567 
  s := FormatFloat(''0,0.0'',1234567); 
  //返回: 1,234,567.0 

  s := FormatFloat(''0.00E+0'',1234567); 
  //返回: 1.23E+6 
  s := FormatFloat(''0.00E+00'',1234567); 
  //返回: 1.23E+06 

  //在科学计数法中使用 # 好像不合适? 

  ShowMessage(s); 
end;

参看资料:

http://www.cnblogs.com/del/archive/2007/12/18/1005161.html 

http://www.cnblogs.com/del/archive/2007/12/19/1005205.html 

http://www.cnblogs.com/del/archive/2007/12/19/1005212.html 

http://www.cnblogs.com/sonicit/archive/2007/06/04/769882.html

我们今天的关于使用.format格式化带有字段宽度参数的列表的分享已经告一段落,感谢您的关注,如果您想了解更多关于Date Format(日期格式化)、DecimalFormat.format()的更快替代方法?、Delphi格式化函数Format、FormatDateTime和FormatFloat、Delphi格式化函数Format、FormatDateTime和FormatFloat详解的相关信息,请在本站查询。

本文标签: