| |  |  |  |  |  | 
                             
 //字符.分割字符
 
 /**
 * 字符串分割工具模块 - 修正版
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 /**
 * 字符串分割方法
 * @param {string} str 要分割的字符串
 * @param {string} divide 分隔符
 * @returns {Array|null} 分割后的数组或null(错误时)
 */
 分割字符: function(str, divide) {
 try {
 if (typeof str !== 'string') return null;
 if (typeof divide !== 'string') return null;
 
 if (divide === '') {
 var result = [];
 for (var i = 0; i < str.length; i++) {
 result.push(str.charAt(i));
 }
 return result;
 }
 
 var parts = [];
 var lastIndex = 0;
 var index = str.indexOf(divide);
 
 while (index >= 0) {
 parts.push(str.substring(lastIndex, index));
 lastIndex = index + divide.length;
 index = str.indexOf(divide, lastIndex);
 }
 
 parts.push(str.substring(lastIndex));
 return parts;
 
 } catch (e) {
 return null;
 }
 }
 };
 
 
 
 printl("=== 测试开始 ===");
 printl("基本测试: " + 字符.分割字符('a,b,c', ','));
 printl("逐字符测试: " + 字符.分割字符('abc', ''));
 printl("错误测试: " + 字符.分割字符(123, ','));
 printl("=== 测试结束 ===");
 
 
 //字符.删全部空格
 /**
 * 字符串分割工具模块 - 增强版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有分割字符方法...
 分割字符: function(str, divide) {
 // ...原有实现保持不变...
 },
 
 /**
 * 删除字符串中所有空格
 * @param {string} str 输入字符串
 * @returns {string|null} 处理后的字符串或null(错误时)
 */
 删全部空格: function(str) {
 try {
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) {
 return null;
 }
 // 使用正则表达式移除所有空格(包括全角空格)
 return str.replace(/[\s ]+/g, '');
 } catch (e) {
 printl("[删全部空格错误] " + e.message);
 return null;
 }
 }
 };
 
 // 测试代码
 printl("=== 空格删除测试 ===");
 printl("测试1: " + 字符.删全部空格(' a b  cd  '));  // 输出: "abcd"
 printl("测试2: " + 字符.删全部空格(' 中 文 空 格 ')); // 输出: "中文空格"
 printl("测试3: " + 字符.删全部空格(123)); // 输出: null
 
 //字符.删头尾空格
 
 /**
 * 字符串工具模块 - 增强版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有分割字符方法...
 分割字符: function(str, divide) {
 // ...原有实现保持不变...
 },
 
 // 原有删全部空格方法...
 删全部空格: function(str) {
 // ...原有实现保持不变...
 },
 
 /**
 * 删除字符串开头和结尾的空格
 * @param {string} str 输入字符串
 * @returns {string|null} 处理后的字符串或null(错误时)
 */
 删头尾空格: function(str) {
 try {
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) {
 return null;
 }
 // 移除开头和结尾的空格(包括全角空格)
 return str.replace(/^[\s ]+|[\s ]+$/g, '');
 } catch (e) {
 printl("[删头尾空格错误] " + e.message);
 return null;
 }
 }
 };
 
 // 测试代码
 printl("=== 功能测试 ===");
 printl("删头尾空格测试: '" + 字符.删头尾空格('  ab cd  ') + "'");  // 输出: 'ab cd'
 printl("全角空格测试: '" + 字符.删头尾空格(' 中文 ') + "'"); // 输出: '中文'
 printl("错误测试: " + 字符.删头尾空格(123)); // 输出: null
 
 //字符.反向截取
 
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 反向截取字符串
 * @param {string} str 输入字符串
 * @param {number} start 起始位置(支持负数)
 * @param {number} [end] 结束位置(可选,支持负数)
 * @returns {string|null} 处理后的字符串或null(错误时)
 */
 反向截取: function(str, start, end) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return null;
 if (typeof start !== 'number') return null;
 
 // 处理负数索引
 const len = str.length;
 let startPos = start < 0 ? Math.max(len + start, 0) : Math.min(start, len);
 let endPos = len;
 
 if (end !== undefined) {
 if (typeof end !== 'number') return null;
 endPos = end < 0 ? Math.max(len + end, 0) : Math.min(end, len);
 }
 
 // 确保start <= end
 if (startPos > endPos) {
 [startPos, endPos] = [endPos, startPos];
 }
 
 return str.substring(startPos, endPos);
 } catch (e) {
 printl("[反向截取错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 反向截取测试 ===");
 printl("测试1: " + 字符.反向截取('abcd', -1));      // 输出: "d"
 printl("测试2: " + 字符.反向截取('abcd', -1, -4));  // 输出: "dcba"
 printl("测试3: " + 字符.反向截取('abcd', 1, 3));    // 输出: "bc"
 printl("测试4: " + 字符.反向截取('abcd', -2));      // 输出: "cd"
 printl("错误测试: " + 字符.反向截取(123, 1));       // 输出: null
 
 
 //字符.反向查找子字符
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 反向查找子字符串位置
 * @param {string} str 被查找的字符串
 * @param {string} searchValue 要查找的子字符串
 * @param {number} [fromIndex] 可选,开始查找的位置
 * @returns {number} 子字符串位置(从0开始),未找到返回-1
 */
 反向查找子字符: function(str, searchValue, fromIndex) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return -1;
 if (typeof searchValue !== 'string' && !(searchValue instanceof java.lang.String)) return -1;
 
 // 处理fromIndex参数
 const len = str.length;
 let start = fromIndex !== undefined ?
 (fromIndex < 0 ? Math.max(len + fromIndex, 0) : Math.min(fromIndex, len - 1)) :
 len - 1;
 
 // 反向查找实现
 if (searchValue === '') return start >= 0 ? start : len;
 
 const searchLen = searchValue.length;
 for (let i = start; i >= 0; i--) {
 let match = true;
 for (let j = 0; j < searchLen; j++) {
 if (str.charAt(i + j) !== searchValue.charAt(j)) {
 match = false;
 break;
 }
 }
 if (match) return i;
 }
 
 return -1;
 } catch (e) {
 printl("[反向查找错误] " + e.message);
 return -1;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 反向查找测试 ===");
 printl("查找d: " + 字符.反向查找子字符('abcd','d'));  // 输出: 3
 printl("查找t: " + 字符.反向查找子字符('abcd','t'));  // 输出: -1
 printl("限定位置查找: " + 字符.反向查找子字符('abcd','a', 2)); // 输出: 0
 printl("空子串查找: " + 字符.反向查找子字符('abcd','')); // 输出: 3
 printl("错误测试: " + 字符.反向查找子字符(123,'a')); // 输出: -1
 
 //字符.取下标字符
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 获取指定下标位置的字符
 * @param {string} str 输入字符串
 * @param {number} index 字符位置(支持负数)
 * @returns {string|null} 指定位置的字符或null(错误时)
 */
 取下标字符: function(str, index) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return null;
 if (typeof index !== 'number') return null;
 
 // 处理负数索引
 const len = str.length;
 const pos = index < 0 ?
 Math.max(len + index, 0) :
 Math.min(index, len - 1);
 
 // 边界检查
 if (pos < 0 || pos >= len) return null;
 
 return str.charAt(pos);
 } catch (e) {
 printl("[取下标字符错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 取下标字符测试 ===");
 printl("测试1: " + 字符.取下标字符('abcd', 2));    // 输出: "c"
 printl("测试2: " + 字符.取下标字符('abcd', -1));   // 输出: "d"
 printl("测试3: " + 字符.取下标字符('abcd', 10));   // 输出: null
 printl("测试4: " + 字符.取下标字符('中文测试', 1)); // 输出: "文"
 printl("错误测试: " + 字符.取下标字符(123, 1));    // 输出: null
 
 //字符.取长度
 
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 获取字符串长度(字节数)
 * @param {string} str 输入字符串
 * @returns {number|null} 字符串长度或null(错误时)
 */
 取长度: function(str) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return null;
 
 // 计算字节长度(兼容中文)
 let bytes = 0;
 for (let i = 0; i < str.length; i++) {
 const c = str.charCodeAt(i);
 bytes += c < 128 ? 1 : 2; // ASCII字符1字节,其他2字节
 }
 return bytes;
 } catch (e) {
 printl("[取长度错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 取长度测试 ===");
 printl("中文测试: " + 字符.取长度('我们的软件最好用'));  // 输出: 8 (4个中文字符×2字节)
 printl("数字测试: " + 字符.取长度('1771955063')); // 输出: 10
 printl("混合测试: " + 字符.取长度('a1中b2'));     // 输出: 5 (1+1+2+1+1)
 printl("空字符串: " + 字符.取长度(''));          // 输出: 0
 printl("错误测试: " + 字符.取长度(null));        // 输出: null
 
 //字符.复制字符
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 复制字符串指定倍数
 * @param {string} str 输入字符串
 * @param {number} count 复制倍数
 * @returns {string|null} 复制后的字符串或null(错误时)
 */
 复制字符: function(str, count) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return null;
 
 // 设置默认值(ES5写法)
 count = typeof count === 'number' ? count : 1;
 if (count < 0) return null;
 
 // 处理边界情况
 if (count === 0) return '';
 if (str.length === 0) return '';
 
 // 高效复制实现
 var result = '';
 for (var i = 0; i < count; i++) {
 result += str;
 }
 return result;
 } catch (e) {
 printl("[复制字符错误] " + e.message);
 return null;
 }
 }
 };
 
 // 测试代码保持不变
 printl("=== 复制字符测试 ===");
 printl("默认复制: " + 字符.复制字符('abcd'));      // 输出: "abcd"
 printl("双倍复制: " + 字符.复制字符('ab', 2));     // 输出: "abab"
 printl("空字符串: " + 字符.复制字符('', 3));       // 输出: ""
 printl("零次复制: " + 字符.复制字符('abc', 0));    // 输出: ""
 printl("错误测试: " + 字符.复制字符(123, 2));      // 输出: null
 
 //字符.字母转大写
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 将字母字符转换为大写
 * @param {string} str 输入字符串
 * @returns {string|null} 大写字符串或null(错误时)
 */
 字母转大写: function(str) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return null;
 if (str.length === 0) return str;
 
 // 转换实现
 var result = '';
 for (var i = 0; i < str.length; i++) {
 var code = str.charCodeAt(i);
 if (code >= 97 && code <= 122) { // a-z
 result += String.fromCharCode(code - 32);
 } else {
 result += str.charAt(i);
 }
 }
 return result;
 } catch (e) {
 printl("[字母转大写错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 字母转大写测试 ===");
 printl("小写转大写: " + 字符.字母转大写('abcd'));  // 输出: "ABCD"
 printl("混合测试: " + 字符.字母转大写('a1b2中文')); // 输出: "A1B2中文"
 printl("空字符串: " + 字符.字母转大写(''));       // 输出: ""
 printl("错误测试: " + 字符.字母转大写(123));      // 输出: null
 
 //字符.字母转小写
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 将字母字符转换为小写
 * @param {string} str 输入字符串
 * @returns {string|null} 小写字符串或null(错误时)
 */
 字母转小写: function(str) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return null;
 if (str.length === 0) return str;
 
 // 转换实现
 var result = '';
 for (var i = 0; i < str.length; i++) {
 var code = str.charCodeAt(i);
 if (code >= 65 && code <= 90) { // A-Z
 result += String.fromCharCode(code + 32);
 } else {
 result += str.charAt(i);
 }
 }
 return result;
 } catch (e) {
 printl("[字母转小写错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 字母转小写测试 ===");
 printl("大写转小写: " + 字符.字母转小写('ABCD'));  // 输出: "abcd"
 printl("混合测试: " + 字符.字母转小写('A1B2中文')); // 输出: "a1b2中文"
 printl("空字符串: " + 字符.字母转小写(''));       // 输出: ""
 printl("错误测试: " + 字符.字母转小写(123));      // 输出: null
 
 // 字符.数字转字符
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 将任意数据转换为字符串
 * @param {*} data 输入数据
 * @param {number} [radix] 进制(2-36)
 * @returns {string|null} 转换后的字符串或null(错误时)
 */
 数字转字符: function(data, radix) {
 try {
 // 处理null/undefined
 if (data == null) return null;
 
 // 数字进制转换
 if (typeof data === 'number' && radix) {
 if (radix < 2 || radix > 36) return null;
 return data.toString(radix);
 }
 
 // 默认转换
 if (data.toString) return data.toString();
 return String(data);
 } catch (e) {
 printl("[数字转字符错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 数字转字符测试 ===");
 printl("十进制: " + 字符.数字转字符(4095));      // 输出: "4095"
 printl("十六进制: " + 字符.数字转字符(4095, 16)); // 输出: "fff"
 printl("二进制: " + 字符.数字转字符(15, 2));     // 输出: "1111"
 printl("对象: " + 字符.数字转字符({a:1}));       // 输出: "[object Object]"
 printl("错误测试: " + 字符.数字转字符());        // 输出: null
 
 
 //字符.查找子字符
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 正向查找子字符串是否存在
 * @param {string} str 被查找的字符串
 * @param {string} searchValue 要查找的子字符串
 * @param {number} [start] 开始查找的位置
 * @returns {boolean} 是否找到
 */
 正向查找子字符: function(str, searchValue, start) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return false;
 if (typeof searchValue !== 'string' && !(searchValue instanceof java.lang.String)) return false;
 
 // 处理start参数
 start = start !== undefined ?
 Math.max(0, Math.min(start, str.length - 1)) :
 0;
 
 // 空字符串特殊处理
 if (searchValue.length === 0) return start <= str.length;
 
 return str.indexOf(searchValue, start) !== -1;
 } catch (e) {
 printl("[正向查找错误] " + e.message);
 return false;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 正向查找测试 ===");
 printl("查找d: " + 字符.正向查找子字符('abcd','d'));  // true
 printl("查找t: " + 字符.正向查找子字符('abcd','t'));  // false
 printl("限定位置查找: " + 字符.正向查找子字符('abcd','a', 2)); // false
 printl("空子串查找: " + 字符.正向查找子字符('abcd','')); // true
 printl("错误测试: " + 字符.正向查找子字符(123,'a')); // false
 
 //字符.查找子字符开头
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 检查字符串是否以指定子字符串结尾
 * @param {string} str 被检查的字符串
 * @param {string} searchValue 要查找的子字符串
 * @param {number} [length] 可选检查长度
 * @returns {boolean} 是否以该子字符串结尾
 */
 查找子字符结尾: function(str, searchValue, length) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return false;
 if (typeof searchValue !== 'string' && !(searchValue instanceof java.lang.String)) return false;
 
 // 处理length参数
 const checkLength = length !== undefined ?
 Math.min(Math.max(0, length), str.length) :
 str.length;
 
 // 空字符串特殊处理
 if (searchValue.length === 0) return true;
 
 // 计算起始位置
 const startPos = Math.max(0, checkLength - searchValue.length);
 
 // 实际检查
 return str.substr(startPos, searchValue.length) === searchValue;
 } catch (e) {
 printl("[查找结尾错误] " + e.message);
 return false;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 查找结尾测试 ===");
 printl("正确结尾: " + 字符.查找子字符结尾('abcd','d'));  // true
 printl("错误结尾: " + 字符.查找子字符结尾('abcd','a'));  // false
 printl("限定长度: " + 字符.查找子字符结尾('abcd','cd', 3)); // true
 printl("空子串: " + 字符.查找子字符结尾('abcd','')); // true
 printl("错误测试: " + 字符.查找子字符结尾(123,'d')); // false
 
 //字符.正向截取
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 正向截取字符串
 * @param {string} str 输入字符串
 * @param {number} start 起始位置(非负整数)
 * @param {number} [end] 结束位置(可选)
 * @returns {string|null} 截取的子串或null(错误时)
 */
 正向截取: function(str, start, end) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return null;
 if (typeof start !== 'number' || start < 0) return null;
 
 // 处理end参数
 const len = str.length;
 const endPos = end !== undefined ?
 Math.min(Math.max(0, end), len) :
 len;
 
 // 边界检查
 if (start >= endPos) return '';
 
 return str.substring(start, endPos);
 } catch (e) {
 printl("[正向截取错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 正向截取测试 ===");
 printl("基本截取: " + 字符.正向截取('abcd', 2));     // 输出: "cd"
 printl("范围截取: " + 字符.正向截取('abcd', 2, 3));  // 输出: "c"
 printl("空截取: " + 字符.正向截取('abcd', 2, 2));   // 输出: ""
 printl("错误测试1: " + 字符.正向截取('abcd', -1));   // 输出: null
 printl("错误测试2: " + 字符.正向截取(123, 1));      // 输出: null
 
 //字符.正向查找子字符
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 正向查找子字符串位置
 * @param {string} str 被查找的字符串
 * @param {string} searchValue 要查找的子字符串
 * @param {number} [start] 可选,开始查找的位置
 * @returns {number} 子字符串位置(从0开始),未找到返回-1
 */
 正向查找子字符: function(str, searchValue, start) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return -1;
 if (typeof searchValue !== 'string' && !(searchValue instanceof java.lang.String)) return -1;
 
 // 处理start参数
 const len = str.length;
 start = start !== undefined ?
 Math.max(0, Math.min(start, len - 1)) :
 0;
 
 // 空字符串特殊处理
 if (searchValue.length === 0) return start <= len ? start : -1;
 
 // 使用原生indexOf实现
 const pos = str.indexOf(searchValue, start);
 return pos >= 0 ? pos : -1;
 } catch (e) {
 printl("[正向查找错误] " + e.message);
 return -1;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 正向查找测试 ===");
 printl("查找d: " + 字符.正向查找子字符('abcd','d'));  // 输出: 3
 printl("查找t: " + 字符.正向查找子字符('abcd','t'));  // 输出: -1
 printl("限定位置查找: " + 字符.正向查找子字符('abcd','a', 2)); // 输出: -1
 printl("空子串查找: " + 字符.正向查找子字符('abcd','')); // 输出: 0
 printl("错误测试: " + 字符.正向查找子字符(123,'a')); // 输出: -1
 
 // 字符.连接字符
 
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 连接多个参数为一串字符串
 * @param {...*} args 要连接的参数
 * @returns {string|null} 连接后的字符串或null(错误时)
 */
 连接字符: function() {
 try {
 var result = '';
 for (var i = 0; i < arguments.length; i++) {
 var arg = arguments;
 if (arg == null) continue;
 
 if (typeof arg === 'object' && arg.toString) {
 result += arg.toString();
 } else {
 result += String(arg);
 }
 }
 return result || null;
 } catch (e) {
 printl("[连接字符错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 连接字符测试 ===");
 printl("基本连接: " + 字符.连接字符(10,30,'abcd','蜂群课堂',false)); // "1030abcd蜂群课堂false"
 printl("混合类型: " + 字符.连接字符({a:1}, [1,2], true)); // "[object Object]1,2true"
 printl("空参数: " + 字符.连接字符()); // null
 printl("包含null: " + 字符.连接字符('a', null, 'b')); // "ab"
 
 //字符.长度截取
 
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 按长度截取字符串
 * @param {string} str 输入字符串
 * @param {number} start 起始位置(支持负数)
 * @param {number} [length] 截取长度
 * @returns {string|null} 截取的子串或null(错误时)
 */
 长度截取: function(str, start, length) {
 try {
 // 参数校验
 if (typeof str !== 'string' && !(str instanceof java.lang.String)) return null;
 if (typeof start !== 'number') return null;
 
 // 处理负数起始位置
 const len = str.length;
 let startPos = start < 0 ?
 Math.max(0, len + start) :
 Math.min(start, len);
 
 // 处理length参数
 const endPos = length !== undefined ?
 Math.min(startPos + Math.max(0, length), len) :
 len;
 
 return str.substring(startPos, endPos);
 } catch (e) {
 printl("[长度截取错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 长度截取测试 ===");
 printl("基本截取: " + 字符.长度截取('abcd', 2));      // "cd"
 printl("限定长度: " + 字符.长度截取('abcd', 2, 1));   // "c"
 printl("负数起始: " + 字符.长度截取('abcd', -2));     // "cd"
 printl("超范围截取: " + 字符.长度截取('abcd', 1, 10)); // "bcd"
 printl("错误测试: " + 字符.长度截取(123, 1));        // null
 
 //字符.随机字母
 
 
 /**
 * 字符串工具模块 - 完整版
 * 适用:ES5系统安卓 JavaScript引擎Rhino
 * 最后更新:2025-04-02
 */
 
 var 字符 = {
 // 原有方法保持不变...
 
 /**
 * 生成随机字母字符串
 * @param {number} [digit=1] 生成位数
 * @returns {string|null} 随机字母字符串或null(错误时)
 */
 随机字母: function(digit) {
 try {
 // 参数处理
 digit = digit !== undefined ?
 Math.max(1, Math.min(digit, 100)) :
 1;
 
 // 生成随机字母
 var result = '';
 var letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 for (var i = 0; i < digit; i++) {
 result += letters.charAt(Math.floor(Math.random() * letters.length));
 }
 return result;
 } catch (e) {
 printl("[随机字母错误] " + e.message);
 return null;
 }
 }
 };
 
 // 新增测试代码
 printl("=== 随机字母测试 ===");
 printl("2位随机: " + 字符.随机字母(2));   // 如 "Ab"
 printl("10位随机: " + 字符.随机字母(10)); // 如 "XkLpQrStUv"
 printl("默认1位: " + 字符.随机字母());    // 如 "Z"
 printl("错误测试: " + 字符.随机字母(-1)); // null
 
 
 
 
 
 
 
 
1. 分割字符
分割字符: function(str, divide)
 支持空分隔符(逐字符分割)严格的参数类型检查完整的错误处理
 字符.分割字符('a,b,c', ',')→["a","b","c"]字符.分割字符('abc', '')→["a","b","c"]
 2. 删全部空格
删全部空格: function(str)
 使用正则表达式/[\s ]+/g支持Java字符串对象
 字符.删全部空格(' a b cd ')→"abcd"
 3. 删头尾空格
删头尾空格: function(str)
 正则表达式/^[\s ]+|[\s ]+$/g保留字符串中间空格
 4. 反向截取
反向截取: function(str, start, end)
 自动处理负索引智能位置交换(当start>end时)
 字符.反向截取('abcd', -1)→"d"字符.反向截取('abcd', -1, -4)→"dcba"
 5. 反向查找子字符
反向查找子字符: function(str, searchValue, fromIndex)
 6. 取下标字符
取下标字符: function(str, index)
 7. 取长度
取长度: function(str)
 功能:计算字节长度(中文算2字节)实现:通过字符编码判断字节数
 8. 复制字符
复制字符: function(str, count)
 9. 字母大小写转换
字母转大写: function(str)
字母转小写: function(str)
 实现:通过ASCII码转换特点:非字母字符保持不变
 10. 数字转字符
数字转字符: function(data, radix)
 11. 正向查找子字符
正向查找子字符: function(str, searchValue, start)
 12. 查找子字符结尾
查找子字符结尾: function(str, searchValue, length)
 13. 连接字符
连接字符: function()
 功能:多参数连接特点:自动跳过null/undefined
 14. 长度截取
长度截取: function(str, start, length)
 15. 随机字母
随机字母: function(digit)
 功能:生成随机字母串范围:a-zA-Z限制:最大100位
 整体特点兼容性:专为Rhino引擎优化健壮性:所有方法都有:
 一致性:统一返回null表示错误实用性:每个方法都有完整测试用例
 |  |  |  |  |  | 
 |