这篇文章主要介绍了使用Java语言(一种计算机语言,尤用于创建网站)描述语言实现数据格式化为字符串,非常的实用,这里推荐给有相同需求的小伙伴。
格式化是通过格式操作使任意类型的数据转换成一个字符串。例如下面这样
复制代码代码如下:
脚本
控制台。原木(切碎机。格式( { 0 }-{ 1 }-{ 2 } ,12,24,25));//输出 12 - 24 - 25
/脚本
下面是一个完整的代码,可以复制到自己的项目中。
复制代码代码如下:
!文档类型超文本标记语言
超文本标记语言
头
meta http-equiv= Content-Type Content= text/html;charset=utf-8
/头
身体
编写src= http://代码脚本。jquery。com/jquery-1。9 .1 .量滴js /脚本
脚本
(函数(){
var chopper=窗口。斩波器=窗户。chopper | | { culture:{ } },
数学=数学,
formatRegExp=/{(d )(:[^}])?}/g,
函数=函数,
字符串=字符串,
数字=数字,
OBJECT=object ,
NULL=null ,
布尔=布尔,
未定义=未定义,
slice=[].切片,
全球化=窗口。全球化,
standardformatregexp=/^(n|c|p|e)(d*)$/i,
literalRegExp=/( .)|([][^]*[]?)|([][^]*[]?)/g,
commaRegExp=/,/g,
EMPTY=" ",
点= . ,
逗号=,,
夏普=# ,
零=0 ,
PLACEHOLDER=?,
EN=en-US ,
objectToString={} .toString
//文化
chopper.cultures[en-US]={
名称:恩,
数字格式:{
模式:[-n],
小数:2,
,: ,,
.: .,
组大小:[3],
百分比:{
模式:[-n % , n %],
小数:2,
,: ,,
.: .,
组大小:[3],
符号:"%"
},
货币:{
模式:[($n), $n],
小数:2,
,: ,,
.: .,
组大小:[3],
符号: $
}
},
日历:{
标准:{
天数:{
名称:[星期日,星期一,星期二,星期三,星期四,星期五,星期六],
名称ABC br:[太阳,星期一,星期二,星期三,星期四, Fri ,星期六],
namesShort: [ Su , Mo , Tu , We , Th , Fr , Sa ]
},
月数:{
名称:[一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月],
名称ABC br:[一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月]
},
AM: [ AM , AM , AM ],
PM: [ PM , PM , PM ],
模式:{
年/月/日,
年月日,MMMM年月日,
女:“dddd,MMMM dd,yyyy h:mm:ss tt”,
日/年/小时:分钟tt,
日/年/时:分:秒tt,
男:“MMMM dd”,
男:“MMMM dd”,
s: yyyy-MM-ddTHH:mm:ss ,
汤:嗯,TT,
t:“h:mm:ss TT”,
u: yyyy - MM - DD HH : MM : ss z ,
y: MMMM,yyyy ,
Y: MMMM,yyyy
},
/: /,
:: :,
第一天:0,
twoDigitYearMax: 2029
}
}
};
函数findCulture(文化){
如果(文化){
if (culture.numberFormat) {
回归文化;
}
如果(文化类型===字符串){
var cultures=chopper.cultures
返回cultures[culture]| | cultures[culture。split(-)[0]]| | null;
}
返回空
}
返回空
}
函数getCulture(culture) {
如果(文化){
文化=查找文化(文化);
}
返回文化| |菜刀。文化。当前;
}
函数expandNumberFormat(数字格式){
数字格式。组大小=数字格式。群体规模;
数字格式。百分比。组大小=数字格式。百分比。群体规模;
数字格式。货币。组大小=数字格式。货币。群体规模;
}
菜刀。区域性=函数(区域性名称){
var cultures=chopper.cultures,culture;
if (cultureName!==未定义){
culture=find culture(文化名)| | cultures[EN];
文化。日历=文化。日历。标准;
文化.当前=文化;
如果(全球化!globalize.load) {
expandNumberFormat(区域性。数字格式);
}
}否则{
返回文化.当前
}
};
菜刀。文化(英语);
//数字格式
函数格式编号(数字,格式,区域性){
culture=getCulture(文化);
var数字格式=区域性。数字格式,
组大小=数字格式。组大小[0],
组分隔符=数字格式[逗号],
小数=数字格式[点],
精度=数字格式。小数
模式=数字格式。模式[0],
文字=[],
符号,
isCurrency,isPercent,
自定义精度,
格式和精度,
负数=数字0,
整数,
分数,
整数长度,
分数长度,
替换=空,
值=空,
idx,
长度,
ch,
hasGroup,
hasNegativeFormat,
decimalIndex,
夏普指数,
零索引,
哈斯零,哈斯普,
百分比索引,
货币指数,
startZeroIndex,
start=-1,
结束;
//如果没有数字,则返回空字符串
if (number===undefined) {
空手而归;
}
如果(!isFinite(number)) {
退货数量;
}
//如果没有格式,则返回number.toString()或number.toLocaleString(),如果未定义文化.名称
如果(!格式){
返回culture.name .长度?号码。tolocalestring():number。tostring();
}
formatAndPrecision=standardformatregexp。exec(格式);
//标准格式
如果(格式和精度){
format=formatAndPrecision[1].toLowerCase();
isCurrency=format=== c
isPercent=format=== p
if (isCurrency || isPercent) {
//如果格式是货币或百分比,则获取特定的数字格式信息
numberFormat=isCurrency?数字格式。货币:数字格式。百分比;
组大小=数字格式。group size[0];
组分隔符=数字格式[逗号];
小数=数字格式[点];
精度=数字格式。小数;
symbol=数字格式. symbol
模式=数字格式。模式[负数?0 : 1];
}
custom precision=formatAndPrecision[2];
if (customPrecision) {
精度=自定义精度
}
//返回指数格式的数字
if (format===e) {
返回customPrecision?号码。toexponential(precision):数字。to exponential();//toExponential()和到指数(未定义)在法国法郎#653438中不同。
}
//如果格式是百分比,则相乘
if (isPercent) {
数字*=100;
}
数字=四舍五入(数字,精度);
负数=数字0;
数字=数字. split(点);
integer=number[0];
分数=数字[1];
//如果数字为负数,则排除-。
如果(负){
整数=整数。子串(1);
}
值=整数;
整数长度=整数。长度;
//如果数字足够长,则在数字上添加组分隔符
if (integerLength=groupSize) {
值=空;
for(idx=0;idx integerLengthidx ) {
if(idx 0(整数长度-idx)%组大小===0){
值=groupSeparator
}
值=整数。charat(idx);
}
}
如果(分数){
值=小数部分;
}
if (format===n !负){
返回值;
}
数字=空;
for (idx=0,length=pattern.lengthidx长度;idx ) {
ch=模式。charat(idx);
if (ch===n) {
数=值;
} else if (ch===$ || ch===%) {
数字=符号;
}否则{
数字=ch
}
}
退货数量;
}
//自定义格式
//
//用节来分隔格式。
//使数字为正数
如果(负){
数字=-数字;
}
如果(格式。(“”)-1 | |格式的索引。(“”)-1 | |格式的索引。的索引(“”)-1){
格式=格式。replace(literalRegExp,function (match) {
var quoteChar=match.charAt(0).替换( ,),
literal=match.slice(1).replace(quoteChar, );
文字. push(文字);
返回占位符;
});
}
格式=格式。拆分(;);
如果(否定格式[1]) {
//获取负格式
format=format[1];
hasNegativeFormat=true
} else if (number===0) {
//零的格式
format=format[2]| | format[0];
如果(格式。(SHARP)==-1格式的索引。(零)==-1)的索引{
//如果是字符串常量,则返回格式。
返回格式;
}
}否则{
format=format[0];
}
百分比索引=格式。的索引(" % ");
货币指数=格式。(“$”)的索引;
isPercent=percentIndex!=-1;
isCurrency=currencyIndex!=-1;
//如果格式有百分比,则乘以数字
if (isPercent) {
数字*=100;
}
if(is currency format[currency index-1]=== ){
format=format.split( ).联接("");
isCurrency=false
}
if (isCurrency || isPercent) {
//如果格式是货币或百分比,则获取特定的数字格式信息
numberFormat=isCurrency?数字格式。货币:数字格式。百分比;
组大小=数字格式。group size[0];
组分隔符=数字格式[逗号];
小数=数字格式[点];
精度=数字格式。小数;
symbol=数字格式. symbol
}
hasGroup=format.indexOf(逗号)-1;
if (hasGroup) {
格式=格式。replace(commaRegExp,EMPTY);
}
十进制索引=格式。(点)的索引;
长度=格式.长度
if (decimalIndex!=-1) {
分数=number.toString().拆分( e );
if (fraction[1]) {
分数=四舍五入(数字,数学。ABS(分数[1]);
}否则{
分数=分数[0];
}
分数=分数。split(POINT)[1]| |空;
zeroIndex=format.lastIndexOf(零)-十进制索引;
夏普指数=格式。lastindexof(SHARP)-十进制索引;
有零=零索引-1;
hass harp=夏普指数-1;
idx=分数。长度;
如果(!hasZero!hasSharp) {
format=format.substring(0,十进制索引)格式。子串(十进制索引1);
长度=格式.长度
十进制索引=-1;
idx=0;
}如果(有零零索引锐索引){
idx=零索引
} else if (sharpIndex zeroIndex) {
if (hasSharp idx sharpIndex) {
idx=sharpIndex
} else if (hasZero idx zeroIndex) {
idx=零索引
}
}
if (idx -1) {
数字=四舍五入(数字,idx);
}
}否则{
数=圆(数);
}
夏普指数=格式。(夏普)指数;
开始零索引=零索引=格式。的索引(零);
//定义第一个数字占位符的索引
if (sharpIndex==-1 zeroIndex!=-1) {
开始=零索引
} else if (sharpIndex!=-1 zeroIndex==-1) {
start=sharpIndex
}否则{
start=sharpIndex zeroIndex?零指数:尖指数;
}
夏普指数=格式。lastindexof(SHARP);
zeroIndex=format.lastIndexOf(零);
//定义最后一个数字占位符的索引
if (sharpIndex==-1 zeroIndex!=-1) {
end=zeroIndex
} else if (sharpIndex!=-1 zeroIndex==-1) {
end=sharpIndex
}否则{
end=sharpIndex zeroIndex?尖指数:零指数;
}
if (start==length) {
结束=开始;
}
如果(开始!=-1) {
value=number.toString().分裂(点);
integer=value[0];
分数=值[1] ||空;
整数长度=整数。长度;
fractionLength=分数。长度;
如果(负数(数字* -1)=0) {
负=假;
}
//如果数字足够长,则在数字上添加组分隔符
if (hasGroup) {
if(整数长度===组大小整数长度小数索引-起始零索引){
整数=groupSeparator整数;
} else if(整数长度组大小){
值=空;
for(idx=0;idx integerLengthidx ) {
if(idx 0(整数长度-idx)%组大小===0){
值=groupSeparator
}
值=整数。charat(idx);
}
整数=值;
}
}
number=format.substring(0,start);
如果(负!hasNegativeFormat) {
number=-;
}
for(idx=start;idx长度;idx ) {
ch=格式。charat(idx);
if (decimalIndex==-1) {
if (end - idx integerLength) {
数字=整数;
打破;
}
}否则{
if (zeroIndex!=-1 zeroIndex idx) {
替换=空;
}
if((decimal index-idx)=1整数长度decimalIndex - idx -1) {
数字=整数;
idx=decimalIndex
}
if (decimalIndex===idx) {
数=(分数?小数:空)分数;
idx=结束十进制索引1;
继续;
}
}
if (ch===零){
数字=ch
替换=ch
} else if (ch===SHARP) {
数量=替换;
}
}
if (end=start) {
数字=格式。子串(结束1);
}
//
replace symbol placeholders???????????????????? if (isCurrency || isPercent) {???????????????????????? value = EMPTY;???????????????????????? for (idx = 0, length = number.length; idx < length; idx++) {???????????????????????????? ch = number.charAt(idx);???????????????????????????? value += (ch === "$" || ch === "%") ? symbol : ch;???????????????????????? }???????????????????????? number = value;???????????????????? }???????????????????? length = literals.length;???????????????????? if (length) {???????????????????????? for (idx = 0; idx < length; idx++) {???????????????????????????? number = number.replace(PLACEHOLDER, literals[idx]);???????????????????????? }???????????????????? }???????????????? }???????????????? return number;???????????? }???????????? var round = function(value, precision) {???????????????? precision = precision || 0;???????????????? value = value.toString().split(e);???????????????? value = Math.round(+(value[0] + e + (value[1] ? (+value[1] + precision) : precision)));???????????????? value = value.toString().split(e);???????????????? value = +(value[0] + e + (value[1] ? (+value[1] - precision) : -precision));???????????????? return value.toFixed(precision);???????????? };???????????? var toString = function(value, fmt, culture) {???????????????? if (fmt) {???????????????????? if (typeof value === NUMBER) {???????????????????????? return formatNumber(value, fmt, culture);???????????????????? }???????????????? }???????????????? return value !== undefined ? value : "";???????????? };???????????? if (globalize && !globalize.load) {???????????????? toString = function(value, format, culture) {???????????????????? if ($.isPlainObject(culture)) {???????????????????????? culture = culture.name;???????????????????? }???????????????????? return globalize.format(value, format, culture);???????????????? };???????????? }???????????? chopper.format = function(fmt) {???????????????? var values = arguments;???????????????? return fmt.replace(formatRegExp, function(match, index, placeholderFormat) {???????????????????? var value = values[parseInt(index, 10) + 1];???????????????????? return toString(value, placeholderFormat ? placeholderFormat.substring(1) : "");???????????????? });???????????? };???????? })();???????? </script>???? </body>?</html>API:
复制代码 代码如下:chopper.format({0} is playing {1}, Xiaoming, basketball); // outputs "Xiaoming is playing basketball"// 价格chopper.format({0:c} - {1:c}, 10, 20); // outputs "10.00?20.00"// 指数chopper.format(指数: {0:e}, 25); // outputs "指数: 2.5e+1"// 百分数chopper.format(百分数: {0:p}, 25); // outputs "百分数: 2,500.00 %"// 小数chopper.format(小数: {0:n}, 25); // outputs "小数: 25.00"
小结:
开发中格式化数据还是经常用到的,比如我们要根据变量提示不同的信息,但是内容模板都是一样的,这样的话我们就可以使用此方法。如果你的项目使用jQuery,你也可以将上面的javascript封装成jQuery插件。