kmp openharmony 字符串回文检测与处理
本文介绍了一个基于Kotlin Multiplatform和OpenHarmony的轻量级回文检测工具。核心功能包括:字符串回文检测(忽略大小写和标点)、字符串反转和字符清理,通过ArkTS界面可视化展示结果。Kotlin算法核心采用字符串反转比较法(O(n)复杂度),通过@JsExport桥接JavaScript,最终在OpenHarmony终端实现跨平台运行。该工具适用于编程学习、算法演示等场

回文检测是经典的字符串算法问题。基于 Kotlin Multiplatform(kmp)与 openharmony,我们实现了一个轻量级的回文检测工具:输入字符串,即可检测是否为回文,并提供反转、字符清理等功能,通过 ArkTS 面板进行可视化呈现。本文包含简洁的 Kotlin 算法实现、JavaScript 桥接与 ArkTS UI 代码。
Kotlin 回文检测引擎
@JsExport
fun palindromeChecker(inputData: String): String {
val sanitized = inputData.trim()
if (sanitized.isEmpty()) {
return "❌ 输入为空,请输入需要检测的字符串"
}
val inputs = sanitized.split("|", ";", "\n")
.map { it.trim() }
.filter { it.isNotEmpty() }
if (inputs.isEmpty()) {
return "❌ 未找到有效的字符串,请检查输入格式"
}
val builder = StringBuilder()
builder.appendLine("🔄 回文检测分析报告")
builder.appendLine("检测字符串数量: ${inputs.size}")
builder.appendLine("----- 检测结果 -----")
inputs.forEachIndexed { index, text ->
val cleaned = text.lowercase().filter { it.isLetterOrDigit() }
val isPalindrome = cleaned == cleaned.reversed()
val reversed = text.reversed()
val charCount = text.length
val cleanedLength = cleaned.length
builder.appendLine("${index + 1}. 原文: \"$text\"")
builder.appendLine(" 字符数: $charCount (清理后: $cleanedLength)")
builder.appendLine(" 反转: \"$reversed\"")
builder.appendLine(" 是否回文: ${if (isPalindrome) "✅ 是" else "❌ 否"}")
if (cleaned.isNotEmpty()) {
builder.appendLine(" 清理后: \"$cleaned\"")
}
}
val palindromeCount = inputs.count { text ->
val cleaned = text.lowercase().filter { it.isLetterOrDigit() }
cleaned.isNotEmpty() && cleaned == cleaned.reversed()
}
builder.appendLine("统计: 共 ${inputs.size} 个字符串,其中 $palindromeCount 个是回文")
return builder.toString().trim()
}
该 Kotlin 函数接收字符串(多个字符串用 | 分隔),对每个字符串进行回文检测:使用 lowercase() 转为小写,filter { it.isLetterOrDigit() } 清理非字母数字字符,然后比较原字符串与反转后的字符串是否相等。同时提供反转和清理功能。结果以文本形式返回,方便在 ArkTS 中展示。通过 @JsExport 标注,该函数可编译到 JavaScript,供 openharmony 端调用。
JavaScript 桥接函数
import { palindromeChecker } from './hellokjs.js';
export function runPalindromeCheck(payload) {
const normalized = typeof payload === 'string' ? payload.trim() : '';
if (!normalized) {
return '⚠️ 输入为空,请提供字符串';
}
try {
const report = palindromeChecker(normalized);
console.info('[palindrome] success', report.split('\n')[0]);
return report;
} catch (error) {
console.error('[palindrome] failed', error);
return `❌ 执行失败: ${error?.message ?? error}`;
}
}
桥接层负责输入校验和异常捕获,调用 Kotlin 引擎并返回结果。
ArkTS 回文检测面板
import { palindromeChecker } from './hellokjs';
@Component
struct PalindromePanel {
@State inputData: string = 'level|hello|A man a plan a canal Panama|racecar';
@State result: string = '';
@State loading: boolean = false;
execute() {
this.loading = true;
setTimeout(() => {
this.result = palindromeChecker(this.inputData);
this.loading = false;
}, 100);
}
}
ArkTS UI 提供文本输入框、检测按钮和结果展示区域,用户可以输入字符串并查看回文检测结果。
算法说明
本实现采用简单的字符串反转比较算法:
- 回文检测:将字符串转为小写并清理非字母数字字符后,比较原字符串与反转字符串是否相等,时间复杂度为 O(n)
- 字符串反转:使用 Kotlin 标准库的
reversed()方法 - 字符清理:使用
filter { it.isLetterOrDigit() }过滤,忽略大小写和标点符号
代码简洁高效,适合快速回文检测场景。
应用场景
该工具适用于字符串算法学习、文本处理验证等场景,例如:编程练习、字符串算法演示、文本特征分析等。通过 kmp 与 openharmony 的协同,可以在终端设备上快速完成回文检测,无需依赖大型文本处理工具。***
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
更多推荐
所有评论(0)