字符串输出格式化(Java、Python、JavaScript、Kotlin)
2017-12-27 15:25
1376 查看
前言
在日常开发中,字符串格式化是常用的功能,帮助我们美化输出信息.假设有这么一段文本需要格式化输出:
INFO 10000 --- [ main] AccountServiceApplication 执行时长 40 ms.
格式化说明
属性 | 内容说明 | 格式要求 |
---|---|---|
INFO | 日志级别 | 占位 5,靠左对齐 |
10000 | 进程 PID 值 | 占位 6 ,居中显示 |
main | 线程名称 | 占位 15,靠右对齐 |
AccountServiceApplication | 执行方法名,占位 30,靠右对齐 | |
40 | 为执行时间值 | 占位 6,靠左对齐 |
Java
JDK 自带的String.format()并没有居中的功能,这里借助了
Apache Common-Lang包进行居中显示。
import org.apache.commons.lang.StringUtils; String line = "%-5s %s --- [%15s] %30s 执行时长 %-6d ms."; System.out.println( String.format(line, "INFO", StringUtils.center("10000",6), "main", "AccountServiceApplication", 40 ) );
参考资源:Java格式化字符串-String.format()的使用
Kotlin
由于Kotlin与
Java兼容,上述方案同样适用于
Kotlin.
val line = "%-5s %s --- [%15s] %30s 执行时长 %-6d ms." println( line.format( "INFO", StringUtils.center("10000", 6), "main", "AccountServiceApplication", 40 ) )
Python
以下示例基于Python3测试
python提供了强大的
format方法,使用
{}作为占位符,示例:
# 若 {} 中没有添加序号(0开始)则按照参数顺序 'Hello, my name is {}, {} years old!'.format("Tinker", 45) # Hello, my name is Tinker, 45 years old! # 同时可以任意调整顺序 'Hello, my name is {2}, {0} years old, I come from {1}'.format(45,"China","Tinker") # Hello, my name is Tinker, 45 years old, I come from China # 使用参数名或者字典(需要在前面加上 ** ) 'Hello, my name is {name}, {age} years old!'.format(name="Tinker", age=45) 'Hello, my name is {name}, {age} years old!'.format(**{"name":"Tinker", "age":45}) # Hello, my name is Tinker, 45 years old! # 填充及格式化 # :[填充字符][对齐方式 <^> 分别是靠左、居中、靠右][宽度] # 显示身份证后四位 'ID Num: {:*>18}'.format(5437) # ID Num: **************5437 # 显示手机号码前三位 'Phone Num: {0:*<11}'.format(188) # Phone Num: 188********
对于
前言中的格式化需求,可以这样写:
'{level:<5} {pid:^6} --- [{thread:>15}] {method:>30} : 执行时长 {time:<6} ms'.format(level="INFO",pid=10000,thread="main",method="AccountServiceApplication",time=40)
参考资源:python之字符串格式化(format)
JavaScript
JavaScript、Node.js 中并没有直接提供相应的方法来完成上述需求,但是可以自己封装方法。//此代码来源自 https://github.com/component/pad/blob/master/index.js /** * Pad `str` to `len` with optional `c` char, * favoring the left when unbalanced. * * @param {String} str * @param {Number} len * @param {String} c * @return {String} * @api public */ function pad(str, len, c) { c = c || ' '; str = str + ""; if (str.length >= len) return str; len = len - str.length; var left = Array(Math.ceil(len / 2) + 1).join(c); var right = Array(Math.floor(len / 2) + 1).join(c); return left + str + right; } /** * Pad `str` left to `len` with optional `c` char. * * @param {String} str * @param {Number} len * @param {String} c * @return {String} * @api public */ function left(str, len, c){ c = c || ' '; str = str + ""; if (str.length >= len) return str; return Array(len - str.length + 1).join(c) + str; } /** * Pad `str` right to `len` with optional `c` char. * * @param {String} str * @param {Number} len * @param {String} c * @return {String} * @api public */ function right(str, len, c){ c = c || ' '; str = str + ""; if (str.length >= len) return str; return str + Array(len - str.length + 1).join(c); }
则需求方案如下:
data = { level:"INFO", pid:"10000", thread:"main", method:"AccountServiceApplication", time:"40" } `${left(data.level,5)} ${pad(data.pid,6)} --- [${left(data.thread,15)}] ${left(data.method,30)} 执行时长 ${right(data.time,6)} ms.`
JS 阵营中有很多强大的库能满足以上需求,如 stringjs
相关文章推荐
- Python 字符串 格式化 输出
- java常用类解析八:java字符串与格式化输出
- java中实现与.net的format格式化字符串输出
- JAVA中数字、日期、字符串的格式化输出
- 【Python④】python恼人的字符串,格式化输出
- java常用类解析八:java字符串与格式化输出
- JAVA中数字、日期、字符串的格式化输出
- java对Json字符串的格式化输出
- python字符串格式化输出
- Java字符串的格式化与输出
- Java.util.Date类型格式化输出和字符串转Date类型
- Java.util.Date类型格式化输出和字符串转Date类型
- java将字符串进行MD5加密和将时间戳格式化输出的方法
- Freemarker输出json和java字符串以及javascript代码转义
- python中格式化字符串输出的方法总结
- Python字符串格式化输出方法分析
- Java字符串_日期_数字格式化输出
- JavaScript字符串格式化输出
- python字符串格式化输出的方式
- java字符串与格式化如何输出