testme

function formatName(name: string, max: number, includeMaxChar: boolean): string {
    let charCount = 0;
    let result = '';

    // 计算字符长度的函数
    const getCharSize = (char: string): number => {
        const charCode = char.charCodeAt(0);
        // 中文字符 (UNICODE 范围) 或大写英文字符
        if ((charCode >= 0x4e00 && charCode <= 0x9fff) || (charCode >= 65 && charCode <= 90)) {
            return 1; // 中文字符和大写英文字符计作 1 个字符大小
        } 
        // 小写英文字符和数字
        else if ((charCode >= 97 && charCode <= 122) || (charCode >= 48 && charCode <= 57)) {
            return 0.5; // 小写英文字符和数字计作 0.5 个字符大小
        }
        return 0; // 其他字符不计算
    };

    // 遍历每个字符,计算长度并构建结果
    for (const char of name) {
        const size = getCharSize(char);

        // 判断是否超过了 max 或 max-2
        if (includeMaxChar) {
            if (charCount + size > max) {
                return result + '...'; // 如果超过了 max,则加省略号
            }
        } else {
            if (charCount + size > max - 2) {
                return result + '...'; // 如果不包含最长字符,则按照 max-2 个字符进行截取
            }
        }
        result += char;
        charCount += size;
    }

    // 如果最终字符长度满足要求
    if (includeMaxChar) {
        return charCount <= max ? name : result + '...';
    } else {
        return charCount < max ? name : result + '...';
    }
}

// 测试用例
console.log(formatName('测试测试测试测试', 8, true));  // 包含最长字符 max
console.log(formatName('111测试测试测试测11111', 8, true));  // 包含最长字符 max
console.log(formatName('测试测试测试测a', 8, true));  // 包含最长字符 max
console.log(formatName('a测试测试测试七', 8, true));  // 包含最长字符 max
console.log(formatName('aa测试测试测试七', 8, true));  // 包含最长字符 max
console.log(formatName('aa测试测试a测a试', 8, true));  // 包含最长字符 max
console.log('===================='); // 不包含最长字符 max
console.log(formatName('测试测试测试测试', 8, false));  // 包含最长字符 max
console.log(formatName('测试测试测试测1', 8, false));  // 包含最长字符 max
console.log(formatName('测试测试测试测a', 8, false));  // 包含最长字符 max
console.log(formatName('a测试测试测试七', 8, false));  // 包含最长字符 max
console.log(formatName('aa测试测试测试七', 8, false));  // 包含最长字符 max
console.log(formatName('aa测试测试a测a试', 8, false));  // 包含最长字符 max
function formatName(name: string, max: number, includeMaxChar: boolean): string {
    let charCount = 0;
    let result = '';

    // 根据字符类型计算字符大小
    const getCharSize = (char: string): number =>
        /[\u4e00-\u9fffA-Z]/.test(char) ? 1 : /[a-z0-9]/.test(char) ? 0.5 : 0;

    // 实际允许的字符总长度
    const maxAllowedLength = includeMaxChar ? max : max - 2;

    // 遍历字符串并计算长度
    for (const char of name) {
        const size = getCharSize(char);
        if (charCount + size > maxAllowedLength) {
            return result + '...'; // 超过最大长度时加省略号
        }
        result += char;
        charCount += size;
    }

    return result; // 未超出最大长度则直接返回结果
}



// 测试用例
console.log(formatName('测试测试测试测试', 8, true));  // 包含最长字符 max
console.log(formatName('111测试测试测试测11111', 8, true));  // 包含最长字符 max
console.log(formatName('测试测试测试测aA', 8, true));  // 包含最长字符 max
console.log(formatName('a测试测试测试七', 8, true));  // 包含最长字符 max
console.log(formatName('aa测试测试测试七', 8, true));  // 包含最长字符 max
console.log(formatName('aa测试测试a测a试', 8, true));  // 包含最长字符 max
console.log('===================='); // 不包含最长字符 max
console.log(formatName('测试测试测试测试', 8, false));  // 包含最长字符 max
console.log(formatName('测试测试测试测1', 8, false));  // 包含最长字符 max
console.log(formatName('测试测试测试测a', 8, false));  // 包含最长字符 max
console.log(formatName('a测试测试测试七', 8, false));  // 包含最长字符 max
console.log(formatName('aa测试测试测试七', 8, false));  // 包含最长字符 max
console.log(formatName('aa测试测试a测a试', 8, false));  // 包含最长字符 max
function formatName(name: string, max: number, includeMaxChar: boolean): string {
        let charCount = 0;
        let result = '';
        const maxAllowedLength = includeMaxChar ? max : max - 2;

        // 计算字符大小的简化版函数
        const getCharSize = (char: string): number => /[\u4e00-\u9fffA-Z]/.test(char) ? 1 : 0.5;

        // 遍历字符,计算长度并生成结果
        for (const char of name) {
            const size = getCharSize(char);
            if (charCount + size > maxAllowedLength) {
                return result + '...';  // 超出最大长度,加省略号
            }
            result += char;
            charCount += size;
        }

        return result;  // 未超出最大长度,返回完整字符串
    }



// 测试用例
console.log(formatName('测试测试测试测试', 8, true));  // 包含最长字符 max
console.log(formatName('111测试测试测试测11111', 8, true));  // 包含最长字符 max
console.log(formatName('测试测试测试测aA', 8, true));  // 包含最长字符 max
console.log(formatName('a测试测试测试七', 8, true));  // 包含最长字符 max
console.log(formatName('aa测试测试测试七', 8, true));  // 包含最长字符 max
console.log(formatName('aa测试测试a测a试', 8, true));  // 包含最长字符 max
console.log('===================='); // 不包含最长字符 max
console.log(formatName('测试测试测试测试', 8, false));  // 包含最长字符 max
console.log(formatName('测试测试测试测1', 8, false));  // 包含最长字符 max
console.log(formatName('测试测试测试测a', 8, false));  // 包含最长字符 max
console.log(formatName('a测试测试测试七', 8, false));  // 包含最长字符 max
console.log(formatName('aa测试测试测试七', 8, false));  // 包含最长字符 max
console.log(formatName('aa测试测试a测a试', 8, false));  // 包含最长字符 max
function formatName(name: string, max: number, includeMaxChar: boolean): string {
        let charCount = 0;
        let result = '';
        const maxAllowedLength = includeMaxChar ? max : max - 2;

        // 计算字符大小的简化版函数
        const getCharSize = (char: string): number => /[\u4e00-\u9fffA-Z]/.test(char) ? 1 : 0.5;

        // 遍历字符,计算长度并生成结果
        for (const char of name) {
            const size = getCharSize(char);
            if (charCount + size > maxAllowedLength) {
                return result + '...';  // 超出最大长度,加省略号
            }
            result += char;
            charCount += size;
        }

        return result;  // 未超出最大长度,返回完整字符串
    }



// 测试用例
console.log(formatName('一二三四五六七八九十', 8, true));  // 包含最长字符 max
console.log(formatName('一二三四五六七八', 8, true));  // 包含最长字符 max
console.log(formatName('一二三四五六七八1', 8, true));  // 包含最长字符 max
console.log(formatName('一二三四五六七八a', 8, true));  // 包含最长字符 max
console.log(formatName('一二三四五六七A', 8, true));  // 包含最长字符 max
console.log(formatName('一二三四五六七a', 8, true));  // 包含最长字符 max
console.log(formatName('一二三四五六Aa', 8, true));  // 包含最长字符 max
console.log(formatName('一二三四五六Aaa', 8, true));  // 包含最长字符 max
console.log(formatName('一二三四五六Aaa1', 8, true));  // 包含最长字符 max
console.log(formatName('一二三四五六1aa', 8, true));  // 包含最长字符 max
console.log(formatName('一二', 8, true));  // 包含最长字符 max
console.log(formatName('a一二三四五六1aa', 8, true));  // 包含最长字符 max
console.log(formatName('aaa一二三四五六七baa', 8, true));  // 包含最长字符 max

console.log('===================='); // 不包含最长字符 max


// 测试用例
console.log(formatName('一二三四五六七八九十', 8, false));  // 包含最长字符 max
console.log(formatName('一二三四五六', 8, false));  // 包含最长字符 max
console.log(formatName('一二三四五六1', 8, false));  // 包含最长字符 max
console.log(formatName('一二三四五六a', 8, false));  // 包含最长字符 max
console.log(formatName('一二三四五六A', 8, false));  // 包含最长字符 max
console.log(formatName('一二三四五a', 8, false));  // 包含最长字符 max
console.log(formatName('一二三四五Aa', 8, false));  // 包含最长字符 max
console.log(formatName('一二三四五Aaa', 8, false));  // 包含最长字符 max
console.log(formatName('一二三四Aaa1', 8, false));  // 包含最长字符 max
console.log(formatName('一二三四五六1aa', 8, false));  // 包含最长字符 max
console.log(formatName('一二', 8, false));  // 包含最长字符 max
console.log(formatName('a一二三四五六1aa', 8, false));  // 包含最长字符 max
console.log(formatName('aaa一二三四五六七baa', 8, false));  // 包含最长字符 max

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值