数码知识屋
霓虹主题四 · 更硬核的阅读氛围

字符串包含子串判断:开发中那些实用的方法

发布时间:2025-12-12 16:23:48 阅读:0 次

在日常写代码的时候,经常要判断一个文本里有没有某个关键词。比如搜索功能里,用户输入“手机”,程序就得检查所有商品标题里是否含“手机”这两个字。这种操作其实就是字符串包含子串判断,听起来简单,但不同语言有不同的写法,用对了事半功倍。

JavaScript 中的常见做法

前端处理文本最多,JavaScript 提供了好几种方式。最常用的是 includes() 方法,直观又安全:

const str = "数码知识屋真不错";
const hasWord = str.includes("知识"); // true

以前很多人用 indexOf(),返回 -1 表示没找到:

const index = str.indexOf("知识"); // 2,不是 -1 就说明存在

如果需要忽略大小写,可以先转成小写再判断:

str.toLowerCase().includes("数码".toLowerCase());

Python 怎么做?

Python 的写法更像说话。直接用 in 关键字就行:

text = "这是一篇关于开发工具的文章"
if "开发工具" in text:
    print("包含关键词")

同样支持忽略大小写:

if "开发工具".lower() in text.lower():
    print("不区分大小写也匹配")

Java 别走老路

有些老项目还在用 Java,判断子串别再手动遍历字符了。直接上 contains()

String str = "欢迎来到数码知识屋";
boolean contains = str.contains("知识屋"); // true

注意,Java 的 contains() 参数是 CharSequence,不只是字符串也能用。如果要忽略大小写,得配合 toLowerCase() 一起:

str.toLowerCase().contains("知识屋".toLowerCase());

正则表达式:灵活但别滥用

有些场景需要更复杂的匹配,比如判断是否包含“数.*?屋”这样的模式。这时候可以用正则:

// JavaScript
const reg = /数.*?屋/;
reg.test("数码知识屋"); // true

但单纯判断是否包含固定文本时,别用正则,性能差还容易出错。就像拿菜刀削苹果,能用但没必要。

实际应用中的小坑

用户搜索时,常遇到空格、标点问题。比如输入“知识屋”,但原文是“数码知识 屋”,中间有空格。这时候可以预处理,把空格去掉再比:

const cleanStr = str.replace(/\s/g, '');
const cleanSearch = search.replace(/\s/g, '');
cleanStr.includes(cleanSearch);

还有些特殊字符,比如全角半角,也可能导致判断失败。根据业务需求决定是否要做归一化处理。

字符串包含判断看似小事,但在搜索、过滤、权限校验等场景里无处不在。选对方法,代码更清晰,运行也更稳。工具就在手边,用熟了自然顺手。