mp3驱动-503 service temporarily unavailable

string format
2023年4月3日发(作者:win7cf烟雾头怎么调)

Android开发:()详解(string的⾼级⽤法)

⽬录

⼀、问题

在实际开发过程中会有如下的业务:在⼀个Textview需要显⽰”我叫xxx,今年xxx岁了,毕业于xxx,⽬前就职于xxx,薪资xxx”。

其中的xxx是变化的,每个⽤户也是不⼀样的。

作为⽼司机的你,遇到这种情况会怎么样解决呢?写多个TextView,分别进⾏赋值吗?这样做的话,怎么能担负得起⽼司机的称号呢?我

们应该遵循Google的开发模式,通过string和()搭配,来实现这⼀需求。接下来,上车,系好安全带,发车喽~

⼆、解决

2.1、例1:“我叫⼩五,今年23岁了,毕业于家⾥蹲,⽬前就职于⽼⽜公司,薪资9000”。

在中可以这样写:

我叫%s,今年%d岁了,毕业于%s,⽬前就职于%s,薪资%.0f

在业务代码中这样写:

LineTextViewlineTextView=findViewById(xtView);

StringformatStr=getResources().getString();

t((formatStr,"⼩五",23,"家⾥蹲","⽼⽜公司",9000.0));

然后,我们进⾏分析。

“我叫⼩五,今年23岁了,毕业于家⾥蹲,⽬前就职于⽼⽜公司,薪资9000”,

⾸先,把这句话中的变量找出来,分别是“⼩五”、“23”、“家⾥蹲”、“⽼⽜公司”、“9000”,这些是我要实时变化的变量。和业

务相关,这⾥我暂定以上5个关键词为变量。

下⼀步,区分变量的类型,我这五个变量中有字符串类型(⼩五、家⾥蹲、⽼⽜公司)、整型(23)、和浮点型(9000)。

第三步,⽤占位符表⽰变量,%s表⽰字符串、%d表⽰整型、%f表⽰浮点型,重新组装句⼦为:“我叫%s,今年%d岁了,毕业于%s,⽬前就

职于%s,薪资%f”。

第四步,使⽤(Stringformat,Object...args)进⾏格式化,填充内容。(“我叫%s,今年%d岁了,毕业于%s,

⽬前就职于%s,薪资%f”,"⼩五",23,"家⾥蹲","⽼⽜公司",9000.0),第⼀个“%s”对应“⼩五”,第⼆个“%d”对应23,第三

个“%s”对应“家⾥蹲”,第四个“%s”对应“⽼⽜公司”,第五个“%f”对应9000.0,将实参和占位符形参对应上就可以了。

2.2、例⼆:“我叫⼩五,今年23岁了,毕业于家⾥蹲,⽬前就职于⽼⽜公司,薪资9000.00”。

例⼆和例⼀的区别就在于薪资的⼩数点位数,来看看实现两位⼩数点该怎么写。

在中可以这样写:

我叫%s,今年%d岁了,毕业于%s,⽬前就职于%s,薪资%.2f

在业务代码中这样写:

LineTextViewlineTextView=findViewById(xtView);

StringformatStr=getResources().getString();

t((formatStr,"⼩五",23,"家⾥蹲","⽼⽜公司",9000.0));

然后,我们进⾏分析。

细⼼的你是否已经发现了两者的不同,其实差别只有⼀点点,在string的语句中,例⼀是这样写的“薪资%.0f”,例⼆是这样写的“薪

资%.2f”。没错,“.”后⾯的数字代表的就是要保留⼩数位数,聪明的你学会了吗?

三、扩展

3.1、重载⽅法

//使⽤本地语⾔(ault())格式化字符串

(Stringfmt,Object...args);

//⾃定义语⾔环境格式化字符串

(Localelocale,Stringfmt,Object...args);

3.2、占位符

占位符完整格式为:%[index$][标识][最⼩宽度][.精度]转换符。

针对不同数据类型的格式化,占位符的格式将有所裁剪。

%,占位符的其实字符,若要在占位符内部使⽤%,则需要写成%%。

[index$],位置索引从1开始计算,⽤于指定对索引相应的实参进⾏格式化并替换掉该占位符。

[标识],⽤于增强格式化能⼒,可同时使⽤多个[标识],但某些标识是不能同时使⽤的。

[最⼩宽度],⽤于设置格式化后的字符串最⼩长度,若使⽤[最⼩宽度]⽽⽆设置[标识],那么当字符串长度⼩于最⼩宽度时,则以左边

补空格的⽅式凑够最⼩宽度。

[.精度],对于浮点数类型格式化使⽤,设置保留⼩数点后多少位。

转换符,⽤于指定格式化的样式,和限制对应⼊参的数据类型。

3.3、对字符、字符串进⾏格式化

占位符格式为:%[index$][标识][最⼩宽度]转换符

⽰例:将"hello"格式化为"hello",如下

Stringraw="hello";

Stringstr=("%1$7s",raw);

//简化

//Stringstr=("%7s",raw);

⽰例:将"hello"格式化为"hello",如下

Stringraw="hello";

Stringstr=("%1$-7s",raw);

//简化

//Stringstr=("%-7s",raw);

可⽤标识:

-,在最⼩宽度内左对齐,右边⽤空格补上。

可⽤转换符:

s,字符串类型。

c,字符类型,实参必须为char或int、short等可转换为char类型的数据类型,否则抛IllegalFormatConversionException异常。

b,布尔类型,只要实参为⾮false的布尔类型,均格式化为字符串true,否则为字符串false。

n,平台独⽴的换⾏符(与通过perty("tor")是⼀样的)

3.4、对整数进⾏格式化

占位符格式为:%[index$][标识][最⼩宽度]转换符

⽰例:将1显⽰为0001,如下

intnum=1;

Stringstr=("%04d",num)

⽰例:将-1000显⽰为(1,000),如下

intnum=-1000;

Stringstr=("%(,d",num)

可⽤标识:

-,在最⼩宽度内左对齐,不可以与0标识⼀起使⽤。

0,若内容长度不⾜最⼩宽度,则在左边⽤0来填充。

#,对8进制和16进制,8进制前添加⼀个0,16进制前添加0x。

+,结果总包含⼀个+或-号。

空格,正数前加空格,负数前加-号。

,,只⽤与⼗进制,每3位数字间⽤,分隔。

(,若结果为负数,则⽤括号括住,且不显⽰符号。

可⽤转换符:

b,布尔类型,只要实参为⾮false的布尔类型,均格式化为字符串true,否则为字符串false。

d,整数类型(⼗进制)。

x,整数类型(⼗六进制)。

o,整数类型(⼋进制)

n,平台独⽴的换⾏符,也可通过perty("tor")获取

3.5、对浮点数进⾏格式化

占位符格式为:%[index$][标识][最⼩宽度][.精度]转换符

⽰例:

doublenum=123.4567899;

("%f%n",num);//123.456790

("%g%n",num);//123.457

可⽤标识:

-,在最⼩宽度内左对齐,不可以与0标识⼀起使⽤。

0,若内容长度不⾜最⼩宽度,则在左边⽤0来填充。

#,对8进制和16进制,8进制前添加⼀个0,16进制前添加0x。

+,结果总包含⼀个+或-号。

空格,正数前加空格,负数前加-号。

,,只⽤与⼗进制,每3位数字间⽤,分隔。

(,若结果为负数,则⽤括号括住,且不显⽰符号。

可⽤转换符:

b,布尔类型,只要实参为⾮false的布尔类型,均格式化为字符串true,否则为字符串false。

n,平台独⽴的换⾏符,也可通过perty("tor")获取。

f,浮点数型(⼗进制)。显⽰9位有效数字,且会进⾏四舍五⼊。如99.99。

a,浮点数型(⼗六进制)。

e,指数类型。如9.38e+5。

g,浮点数型(⽐%f,%a长度短些,显⽰6位有效数字,且会进⾏四舍五⼊)

3.6、对⽇期、时间进⾏格式化

占位符格式为:%[index$]t转换符

⽰例:

Datenow=newDate();

Stringstr=("%tF",now);//2021-01-10

可⽤转换符

1.⽇期的转换符

c,星期六⼗⽉2714:21:20CST2007

F,2007-10-27

D,10/27/07

r,02:25:51下午

T,14:28:16

R,14:28

b,⽉份简称

B,⽉份全称

a,星期简称

A,星期全称

C,年前两位(不⾜两位补零)

y,年后两位(不⾜两位补零)

j,当年的第⼏天

m,⽉份(不⾜两位补零)

d,⽇期(不⾜两位补零)

e,⽇期(不⾜两位不补零)

2.时间的转换符

H,24⼩时制的⼩时(不⾜两位补零)

k,24⼩时制的⼩时(不⾜两位不补零)

I,12⼩时制的⼩时(不⾜两位补零)

i,12⼩时制的⼩时(不⾜两位不补零)

M,分钟(不⾜两位补零)

S,秒(不⾜两位补零)

L,毫秒(不⾜三位补零)

N,毫秒(不⾜9位补零)

p,⼩写字母的上午或下午标记,如中⽂为“下午”,英⽂为pm

z,相对于GMT的时区偏移量,如+0800

Z,时区缩写,如CST

s,⾃1970-1-100:00:00起经过的秒数

Q,⾃1970-1-100:00:00起经过的豪秒

3.7、转换符汇总

显⽰不同转换符实现不同数据类型到字符串的转换,如图所⽰。

转换

说明⽰例

%s字符串类型"mingrisoft"

%c字符类型'm'

%b布尔类型true

%d整数类型(⼗进制)99

%x整数类型(⼗六进制)FF

%o整数类型(⼋进制)77

%f浮点类型99.99

%a⼗六进制浮点类型FF.35AE

%e指数类型9.38e+5

%g通⽤浮点类型(f和e类型中较短的)

%h散列码

%%百分⽐类型%

%n换⾏符

%tx

⽇期与时间类型(x代表不同的⽇期与时间

转换符

3.8、标识汇总

说明⽰例结果

+为正数或者负数添加符号("%+d",15)+15

−左对齐("%-5d",15)|15|

0数字前⾯补0("%04d",99)0099

在整数之前添加指定数量的空

("%4d",99)|99|

,以“,”对数字分组

("%,f",

9999.99)

9,999.990000

(使⽤括号包含负数("%(f",-99.99)(99.990000)

#如果是浮点数则包含⼩数点,

如果是16进制或8进制则添加

0x或0

("%#x",99)

("%#o",99)

0x63

0143

<

格式化前⼀个转换符所描述的

参数

("%f和%<3.2f",

99.45)

99.450000和

99.45

$被格式化的参数索引

("%1$d,%2$s",

99,"abc")

99,abc

3.9、⽇期转换符

说明⽰例

转换

c包括全部⽇期和时间信息

星期六⼗⽉2714:21:20

CST2007

F“年-⽉-⽇”格式2007-10-27

D“⽉/⽇/年”格式10/27/07

r

“HH:MM:SSPM”格式

(12时制)

02:25:51下午

T

“HH:MM:SS”格式(24时

制)

14:28:16

R“HH:MM”格式(24时制)14:28

3.10、时间转换符

转换符说明⽰例

H2位数字24时制的⼩时(不⾜2位前⾯补0)15

I2位数字12时制的⼩时(不⾜2位前⾯补0)03

k2位数字24时制的⼩时(前⾯不补0)15

l2位数字12时制的⼩时(前⾯不补0)3

M2位数字的分钟(不⾜2位前⾯补0)03

S2位数字的秒(不⾜2位前⾯补0)09

L3位数字的毫秒(不⾜3位前⾯补0)015

N9位数字的毫秒数(不⾜9位前⾯补0)562000000

p⼩写字母的上午或下午标记

中:下午

英:pm

z相对于GMT的RFC822时区的偏移量+0800

Z时区缩写字符串CST

s

1970-1-100:00:00到现在所经过的

秒数

1193468128

Q

1970-1-100:00:00到现在所经过的

毫秒数

84

更多推荐

string format