注册 登录
发贴工具
查看: 3|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] AIWROK软件字符串方法实用案例

[复制链接]

2518

主题

2566

帖子

1万

积分

积分
15288
跳转到指定楼层
楼主

AIWROK软件字符串方法实用案例





  1. /**
  2. * 字符串方法实用案例 - 复杂版
  3. * 整合项目中所有字符串相关方法,实现一个完整的文本处理系统
  4. * 兼容ES5和Rhino引擎,适用于安卓AIWROK环境
  5. * //🍎交流QQ群711841924群一,苹果内测群,528816639
  6. * 运行说明:
  7. * 1. 在AIWROK环境中直接运行此文件
  8. * 2. 或在Rhino引擎中使用: rhino 字符串方法实用案例.js
  9. * 3. 或在支持ES5的JavaScript环境中运行
  10. */

  11. // 兼容Rhino引擎的printl函数
  12. if (typeof printl === 'undefined') {
  13.     function printl(msg) {
  14.         console.log(msg);
  15.     }
  16. }

  17. // 兼容Rhino引擎的sleep函数
  18. if (typeof sleep === 'undefined') {
  19.     var sleep = {
  20.         millisecond: function(ms) {
  21.             // 模拟sleep,在Rhino环境中会有真实实现
  22.         }
  23.     };
  24. }


  25. // 导入必要的工具函数
  26. function safeStringOperation(operation, fallbackValue) {
  27.     try {
  28.         return operation();
  29.     } catch (e) {
  30.         printl("字符串操作错误: " + (e.message || e));
  31.         return fallbackValue !== undefined ? fallbackValue : "";
  32.     }
  33. }

  34. // 字符串工具类
  35. function StringUtils() {}

  36. StringUtils.prototype.charAt = function(str, index) {
  37.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  38.     if (typeof index !== 'number' || index % 1 !== 0) throw new Error('[错误] 参数index必须是整数');
  39.     return str.charAt(index);
  40. };

  41. StringUtils.prototype.charCodeAt = function(str, index) {
  42.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  43.     if (typeof index !== 'number' || index % 1 !== 0) throw new Error('[错误] 参数index必须是整数');
  44.     return str.charCodeAt(index);
  45. };

  46. StringUtils.prototype.indexOf = function(str, searchValue, fromIndex) {
  47.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  48.     if (typeof searchValue !== 'string') throw new Error('[错误] 参数searchValue必须是字符串');
  49.     return str.indexOf(searchValue, fromIndex);
  50. };

  51. StringUtils.prototype.lastIndexOf = function(str, searchValue, fromIndex) {
  52.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  53.     if (typeof searchValue !== 'string') throw new Error('[错误] 参数searchValue必须是字符串');
  54.     return str.lastIndexOf(searchValue, fromIndex);
  55. };

  56. StringUtils.prototype.getLength = function(str) {
  57.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  58.     return str.length;
  59. };

  60. StringUtils.prototype.match = function(str, regexp) {
  61.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  62.     if (!(regexp instanceof RegExp)) throw new Error('[错误] 参数regexp必须是正则表达式对象');
  63.     return str.match(regexp);
  64. };

  65. StringUtils.prototype.replace = function(str, searchValue, replaceValue) {
  66.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  67.     return str.replace(searchValue, replaceValue);
  68. };

  69. StringUtils.prototype.replaceAll = function(str, searchValue, replaceValue) {
  70.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  71.    
  72.     // 完全不依赖原生 replaceAll,确保所有环境兼容
  73.     if (typeof searchValue === 'string') {
  74.         var escaped = searchValue.replace(/[.*+?^${}()|[\]\\]/g, '\\[        DISCUZ_CODE_2        ]amp;');
  75.         return str.replace(new RegExp(escaped, 'g'), replaceValue);
  76.     } else if (searchValue instanceof RegExp) {
  77.         var flags = '';
  78.         if (searchValue.ignoreCase) flags += 'i';
  79.         if (searchValue.multiline) flags += 'm';
  80.         flags += 'g';
  81.         return str.replace(new RegExp(searchValue.source, flags), replaceValue);
  82.     }
  83.     return str;
  84. };

  85. StringUtils.prototype.split = function(str, separator, limit) {
  86.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  87.     return str.split(separator, limit);
  88. };

  89. StringUtils.prototype.startsWith = function(str, searchString, position) {
  90.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  91.     position = position || 0;
  92.     return str.indexOf(searchString, position) === position;
  93. };

  94. StringUtils.prototype.endsWith = function(str, suffix) {
  95.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  96.     suffix = String(suffix);
  97.     var length = str.length - suffix.length;
  98.     return length >= 0 && str.indexOf(suffix, length) === length;
  99. };

  100. StringUtils.prototype.substr = function(str, start, length) {
  101.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  102.     return str.substr(start, length);
  103. };

  104. StringUtils.prototype.substring = function(str, start, end) {
  105.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  106.     return str.substring(start, end);
  107. };

  108. StringUtils.prototype.trim = function(str) {
  109.     if (typeof str !== 'string') throw new Error('[错误] 参数str必须是字符串');
  110.     return str.trim();
  111. };

  112. StringUtils.prototype.capitalize = function(str) {
  113.     str = String(str);
  114.     if (str.length === 0) return str;
  115.     return str.charAt(0).toUpperCase() + str.slice(1);
  116. };

  117. StringUtils.prototype.camelCase = function(str) {
  118.     str = String(str);
  119.     var words = str.split(/[\s_-]+/);
  120.     var result = words[0].toLowerCase();
  121.     for (var i = 1; i < words.length; i++) {
  122.         result += this.capitalize(words[i].toLowerCase());
  123.     }
  124.     return result;
  125. };

  126. StringUtils.prototype.kebabCase = function(str) {
  127.     str = String(str);
  128.     return str.replace(/([a-z])([A-Z])/g, '$1-$2')
  129.               .replace(/[\s_]+/g, '-')
  130.               .toLowerCase();
  131. };

  132. StringUtils.prototype.snakeCase = function(str) {
  133.     str = String(str);
  134.     return str.replace(/([a-z])([A-Z])/g, '$1_$2')
  135.               .replace(/[\s-]+/g, '_')
  136.               .toLowerCase();
  137. };

  138. StringUtils.prototype.reverse = function(str) {
  139.     str = String(str);
  140.     var result = '';
  141.     for (var i = str.length - 1; i >= 0; i--) {
  142.         result += str.charAt(i);
  143.     }
  144.     return result;
  145. };

  146. StringUtils.prototype.contains = function(str, search) {
  147.     str = String(str);
  148.     search = String(search);
  149.     return str.indexOf(search) !== -1;
  150. };

  151. // 文本处理系统
  152. function TextProcessor() {
  153.     this.utils = new StringUtils();
  154. }

  155. /**
  156. * 处理用户输入的文本,执行多种字符串操作
  157. * @param {string} input - 用户输入的文本
  158. * @returns {Object} 处理结果
  159. */
  160. TextProcessor.prototype.processText = function(input) {
  161.     var results = {};
  162.    
  163.     // 1. 基本信息
  164.     results.original = input;
  165.     results.length = this.utils.getLength(input);
  166.     results.trimmed = this.utils.trim(input);
  167.    
  168.     // 2. 文本分析
  169.     results.analysis = {
  170.         hasNumbers: /\d/.test(input),
  171.         hasLetters: /[a-zA-Z]/.test(input),
  172.         hasChinese: /[\u4e00-\u9fff]/.test(input),
  173.         hasPunctuation: /[.,!?;:'"()\[\]{}]/.test(input)
  174.     };
  175.    
  176.     // 3. 格式转换
  177.     results.transformations = {
  178.         uppercase: input.toUpperCase(),
  179.         lowercase: input.toLowerCase(),
  180.         capitalize: this.utils.capitalize(input),
  181.         camelCase: this.utils.camelCase(input),
  182.         kebabCase: this.utils.kebabCase(input),
  183.         snakeCase: this.utils.snakeCase(input),
  184.         reversed: this.utils.reverse(input)
  185.     };
  186.    
  187.     // 4. 文本提取
  188.     results.extractions = {
  189.         emails: this.utils.match(input, /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g) || [],
  190.         phones: this.utils.match(input, /\d{3}-?\d{4}-?\d{4}/g) || [],
  191.         urls: this.utils.match(input, /https?:\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:/~+#]*[\w\-@?^=%&/~+#])?/g) || []
  192.     };
  193.    
  194.     // 5. 文本统计
  195.     results.stats = {
  196.         wordCount: this.utils.split(input, /\s+/).length,
  197.         sentenceCount: this.utils.split(input, /[.!?]+/).length,
  198.         paragraphCount: this.utils.split(input, /\n\s*\n/).length
  199.     };
  200.    
  201.     // 6. 敏感信息检测
  202.     results.sensitive = {
  203.         hasCreditCard: /\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}/.test(input),
  204.         hasIdCard: /\d{17}[\dXx]/.test(input),
  205.         hasPassword: /password|密码/i.test(input)
  206.     };
  207.    
  208.     return results;
  209. };

  210. /**
  211. * 生成文本报告
  212. * @param {string} input - 输入文本
  213. * @returns {string} 格式化的报告
  214. */
  215. TextProcessor.prototype.generateReport = function(input) {
  216.     var results = this.processText(input);
  217.     var report = [];
  218.    
  219.     report.push("=== 文本处理报告 ===");
  220.     report.push("原始文本: " + results.original);
  221.     report.push("文本长度: " + results.length);
  222.     report.push("去除空白: '" + results.trimmed + "'");
  223.     report.push("");
  224.    
  225.     report.push("=== 文本分析 ===");
  226.     report.push("包含数字: " + (results.analysis.hasNumbers ? "是" : "否"));
  227.     report.push("包含字母: " + (results.analysis.hasLetters ? "是" : "否"));
  228.     report.push("包含中文: " + (results.analysis.hasChinese ? "是" : "否"));
  229.     report.push("包含标点: " + (results.analysis.hasPunctuation ? "是" : "否"));
  230.     report.push("");
  231.    
  232.     report.push("=== 格式转换 ===");
  233.     report.push("大写: " + results.transformations.uppercase);
  234.     report.push("小写: " + results.transformations.lowercase);
  235.     report.push("首字母大写: " + results.transformations.capitalize);
  236.     report.push("驼峰命名: " + results.transformations.camelCase);
  237.     report.push("短横线命名: " + results.transformations.kebabCase);
  238.     report.push("下划线命名: " + results.transformations.snakeCase);
  239.     report.push("反转: " + results.transformations.reversed);
  240.     report.push("");
  241.    
  242.     report.push("=== 文本提取 ===");
  243.     report.push("邮箱地址: " + (results.extractions.emails.length > 0 ? results.extractions.emails.join(", ") : "无"));
  244.     report.push("电话号码: " + (results.extractions.phones.length > 0 ? results.extractions.phones.join(", ") : "无"));
  245.     report.push("网址链接: " + (results.extractions.urls.length > 0 ? results.extractions.urls.join(", ") : "无"));
  246.     report.push("");
  247.    
  248.     report.push("=== 文本统计 ===");
  249.     report.push("单词数量: " + results.stats.wordCount);
  250.     report.push("句子数量: " + results.stats.sentenceCount);
  251.     report.push("段落数量: " + results.stats.paragraphCount);
  252.     report.push("");
  253.    
  254.     report.push("=== 敏感信息检测 ===");
  255.     report.push("包含信用卡号: " + (results.sensitive.hasCreditCard ? "是" : "否"));
  256.     report.push("包含身份证号: " + (results.sensitive.hasIdCard ? "是" : "否"));
  257.     report.push("包含密码信息: " + (results.sensitive.hasPassword ? "是" : "否"));
  258.     report.push("==================");
  259.    
  260.     return report.join("\n");
  261. };

  262. /**
  263. * 文本清洗和规范化
  264. * @param {string} input - 输入文本
  265. * @returns {string} 清洗后的文本
  266. */
  267. TextProcessor.prototype.cleanText = function(input) {
  268.     var result = input;
  269.    
  270.     // 1. 去除多余空白
  271.     result = this.utils.replaceAll(result, /\s+/g, " ");
  272.     result = this.utils.trim(result);
  273.    
  274.     // 2. 统一标点符号
  275.     result = this.utils.replaceAll(result, /[。]/g, ".");
  276.     result = this.utils.replaceAll(result, /[,]/g, ",");
  277.     result = this.utils.replaceAll(result, /[!]/g, "!");
  278.     result = this.utils.replaceAll(result, /[?]/g, "?");
  279.    
  280.     // 3. 移除敏感信息
  281.     result = this.utils.replaceAll(result, /\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}/g, "[信用卡号]");
  282.     result = this.utils.replaceAll(result, /\d{17}[\dXx]/g, "[身份证号]");
  283.    
  284.     // 4. 修复格式
  285.     result = this.utils.replaceAll(result, /\.\s*/g, ". ");
  286.     result = this.utils.replaceAll(result, /,\s*/g, ", ");
  287.    
  288.     return result;
  289. };

  290. /**
  291. * 文本相似度计算
  292. * @param {string} text1 - 第一个文本
  293. * @param {string} text2 - 第二个文本
  294. * @returns {number} 相似度 (0-1)
  295. */
  296. TextProcessor.prototype.calculateSimilarity = function(text1, text2) {
  297.     // 简单的编辑距离算法实现
  298.     function levenshteinDistance(a, b) {
  299.         var matrix = [];
  300.         
  301.         for (var i = 0; i <= b.length; i++) {
  302.             matrix[i] = [i];
  303.         }
  304.         
  305.         for (var j = 0; j <= a.length; j++) {
  306.             matrix[0][j] = j;
  307.         }
  308.         
  309.         for (var i = 1; i <= b.length; i++) {
  310.             for (var j = 1; j <= a.length; j++) {
  311.                 if (b.charAt(i - 1) === a.charAt(j - 1)) {
  312.                     matrix[i][j] = matrix[i - 1][j - 1];
  313.                 } else {
  314.                     matrix[i][j] = Math.min(
  315.                         matrix[i - 1][j - 1] + 1,
  316.                         matrix[i][j - 1] + 1,
  317.                         matrix[i - 1][j] + 1
  318.                     );
  319.                 }
  320.             }
  321.         }
  322.         
  323.         return matrix[b.length][a.length];
  324.     }
  325.    
  326.     var distance = levenshteinDistance(text1, text2);
  327.     var maxLength = Math.max(this.utils.getLength(text1), this.utils.getLength(text2));
  328.     return maxLength === 0 ? 1 : 1 - (distance / maxLength);
  329. };

  330. // 测试示例
  331. function runTextProcessorDemo() {
  332.     var processor = new TextProcessor();
  333.    
  334.     // 测试文本
  335.     var testTexts = [
  336.         "Hello World! This is a test.",
  337.         "你好,世界!这是一个测试。",
  338.         "Contact: john@example.com, Phone: 138-1234-5678",
  339.         "Password: secret123, Credit Card: 1234-5678-9012-3456",
  340.         "https://www.example.com is a website."
  341.     ];
  342.    
  343.     printl("=== &#128640; 字符串方法实用案例演示 ===");
  344.     printl("整合项目中所有字符串相关方法");
  345.     printl("==================================\n");
  346.    
  347.     for (var i = 0; i < testTexts.length; i++) {
  348.         printl("\n=== 测试文本 " + (i + 1) + " ===");
  349.         printl("原始文本: " + testTexts[i]);
  350.         printl("");
  351.         
  352.         // 生成报告
  353.         var report = processor.generateReport(testTexts[i]);
  354.         printl(report);
  355.         
  356.         // 测试文本清洗
  357.         var cleaned = processor.cleanText(testTexts[i]);
  358.         printl("\n清洗后的文本: " + cleaned);
  359.         
  360.         // 测试相似度计算
  361.         if (i > 0) {
  362.             var similarity = processor.calculateSimilarity(testTexts[0], testTexts[i]);
  363.             printl("与第一个文本的相似度: " + (similarity * 100).toFixed(2) + "%");
  364.         }
  365.         
  366.         printl("\n" + "=".repeat(50));
  367.     }
  368.    
  369.     printl("\n=== 演示完成 ===");
  370. }

  371. // 运行演示
  372. runTextProcessorDemo();
复制代码



untoHID贝塞尔曲线运动控制器nextnocontent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖