通用空白处理识别标准(适用95%+场景)
✅ 规则1:语法分隔符原则
所有语言中,空格/换行在语法单元之间仅作为分隔符,多余数量会被压缩:
code
print("Hello") + "World"
≡ print("Hello")+"World" // 等效
✅ 规则2:首尾忽略原则
行首/行尾的空白(包括空行)默认被删除,除非具有特殊语义:
html
<p>
文本 // 行首空格被删
</p> // 行尾空格被删
✅ 规则3:字符串保留原则
引号内所有空白严格保留(唯一绝对规则):
js
"Line␣␣␣1\n␣␣Line␣2" // ␣和\n原样输出
关键分支判断(处理剩余5%例外)
⚠️ 分支1:是否依赖缩进?
是 → 仅适用Python,行首空格/制表符具有语法意义
python
if True:
[4空格]print() // 缩进错误将导致程序错误
否 → 跳转分支2
⚠️ 分支2:是否HTML/CSS?
是 → 启用空白折叠规则:
元素间换行符 → 转换为单个渲染空格(行内元素间)
块元素间空白 → 完全忽略
需保留空白时:用<pre>/ /white-space:pre
否 → 通用编程语言,遵循规则1-3
速查表
场景 ------------------处理方式------------------------------示例语言
字符串内部------------------全部保留-------------------所有语言
行首空白-----------------Python=语法,其他=删除----------------------Python vs Java
元素间换行--------------------HTML=渲染为空格,其他=忽略--------------------HTML vs C++
连续空格/制表符---------------------压缩为单空格------------------------------Java/Go/JS
空行-----------------------完全忽略-----------------------C#/PHP/Ruby
行尾空白-------------------完全删除---------------------------Kotlin/Swift
掌握这个框架
一图胜千言:把常见语言/工具对“空格、换行”的默认处理方式画成三条线,记住就能一眼判断。
────────────────────
1️⃣ HTML / XML / 浏览器渲染
• 任意数量的空格、TAB、换行 → 合并成一个普通空格
• 连续空白不会保留原始格式
• 想保留必须 <pre>、white-space: pre 或
2️⃣ Shell / Makefile / YAML(标量) / INI
• “换行即结束”:行尾回车换行就是一条记录/语句的终结符
• 行内空格按字面保留,但行尾空格通常被编辑器/解释器 trim
• 多行需用续行符(\)、引号或折叠符(|,>)才能继续
3️⃣ Perl / Python / JavaScript / C / Java / Go / Rust …
• 字符串字面量
引号里写什么字节就留什么字节
\n \t \r 等转义序列会被替换为真实控制字符
• 正则 \s = [ \t\r\n\f\v],默认跨行吞空白
• 语法解析器
语句分隔靠 ; 或换行(Python 用缩进)
多个空格/空行在词法阶段就被扔掉,不参与语法
────────────────────
场景 口诀
HTML-------------------->“空白折叠,一行空格”
Shell/配置---------------->“换行断句,空格照抄”
代码/正则------------------->“字面留字节,\s 吞所有”
以后看到一段文本,只要先想它在哪条线,就能立刻知道空格、换行会被怎样对待。