这篇文章主要介绍了使用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插件。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。