如何实现控制台输出固定间距对齐 不受左侧字符串长度影响
控制台对齐效果实现方案
核心逻辑是先统计所有左侧字符串的最大长度,将每个左侧字符串左对齐填充至该长度+自定义固定间距后,再拼接右侧状态块即可。如果左侧字段长度有明确上限,也可以直接固定填充长度,无需动态计算。
Python 实现
使用Python字符串格式化的左对齐语法即可快速实现:
# 示例数据 items = [ ("password", "Status: 301, Size: 228, Words: 9, Lines: 7"), ("friends", "Status: 301, Size: 227, Words: 9, Lines: 7"), ("madison", "Status: 301, Size: 227, Words: 9, Lines: 7"), ("austin", "Status: 301, Size: 226, Words: 9, Lines: 7"), ] # 计算左侧字段最大长度,额外加2个空格作为固定间距 max_name_len = max(len(name) for name, _ in items) + 2 for name, status in items: print(f"{name:<{max_name_len}}[{status}]")
Shell/Bash 实现
调用系统printf命令的左对齐占位符实现:
# 定义示例数据 declare -a names=("password" "friends" "madison" "austin") declare -a statuses=( "Status: 301, Size: 228, Words: 9, Lines: 7" "Status: 301, Size: 227, Words: 9, Lines: 7" "Status: 301, Size: 227, Words: 9, Lines: 7" "Status: 301, Size: 226, Words: 9, Lines: 7" ) # 计算左侧字段最大长度 max_len=0 for name in "${names[@]}"; do len=${#name} (( len > max_len )) && max_len=$len done # 额外加2位作为固定间距 final_len=$((max_len + 2)) # 循环输出 for i in "${!names[@]}"; do printf "%-${final_len}s[%s]\n" "${names[$i]}" "${statuses[$i]}" done
C 语言实现
使用标准库printf的动态宽度左对齐语法:
#include <stdio.h> #include <string.h> int main() { char *names[] = {"password", "friends", "madison", "austin"}; char *statuses[] = { "Status: 301, Size: 228, Words: 9, Lines: 7", "Status: 301, Size: 227, Words: 9, Lines: 7", "Status: 301, Size: 227, Words: 9, Lines: 7", "Status: 301, Size: 226, Words: 9, Lines: 7" }; int count = 4; int max_len = 0; // 统计左侧最大长度 for (int i = 0; i < count; i++) { int len = strlen(names[i]); if (len > max_len) max_len = len; } int final_len = max_len + 2; // 循环输出,*号对应动态传入的占位长度 for (int i = 0; i < count; i++) { printf("%-*s[%s]\n", final_len, names[i], statuses[i]); } return 0; }
Node.js 实现
使用字符串的padEnd方法补空格到指定长度:
const items = [ ["password", "Status: 301, Size: 228, Words: 9, Lines: 7"], ["friends", "Status: 301, Size: 227, Words: 9, Lines: 7"], ["madison", "Status: 301, Size: 227, Words: 9, Lines: 7"], ["austin", "Status: 301, Size: 226, Words: 9, Lines: 7"], ] // 计算最大长度加2位间距 const maxLen = Math.max(...items.map(([name]) => name.length)) + 2 items.forEach(([name, status]) => { console.log(`${name.padEnd(maxLen)}[${status}]`) })
注意:如果左侧字段包含中文等全角字符,需要额外调整字符宽度计算逻辑,避免全角字符占2个显示位导致对齐错位。
内容的提问来源于stack exchange,提问作者Filipe Azevedo
相关产品推荐
相关产品推荐

