如何高效将完全限定类名转换为包名缩写格式
完全限定类名的包名缩写转换实现方案
核心逻辑
将完全限定类名按.分割为多个片段,最后一段为类名保留完整写法,前面所有包名片段仅保留首字母,再用.拼接所有处理后的片段即可。时间复杂度为O(n),n为输入字符串长度,性能表现优异。
实现代码
Java 版本
public static String abbreviatePackage(String fullClassName) { // 空值直接返回 if (fullClassName == null || fullClassName.isBlank()) { return fullClassName; } String[] parts = fullClassName.split("\\."); // 无包名的类名直接返回 if (parts.length == 1) { return parts[0]; } StringBuilder result = new StringBuilder(); // 包名片段取首字母 for (int i = 0; i < parts.length - 1; i++) { if (!parts[i].isBlank()) { result.append(parts[i].charAt(0)).append('.'); } } // 拼接完整类名 result.append(parts[parts.length - 1]); return result.toString(); }
Python 版本
def abbreviate_package(full_class_name: str) -> str: parts = full_class_name.split('.') if len(parts) == 1: return parts[0] # 处理包名缩写,自动跳过空片段 pkg_abbr = [p[0] for p in parts[:-1] if p.strip()] pkg_abbr.append(parts[-1]) return '.'.join(pkg_abbr)
JavaScript 版本
function abbreviatePackage(fullClassName) { if (!fullClassName?.trim()) return fullClassName const parts = fullClassName.split('.') if (parts.length === 1) return parts[0] const pkgAbbr = parts.slice(0, -1).filter(p => p.trim()).map(p => p[0]) pkgAbbr.push(parts.at(-1)) return pkgAbbr.join('.') }
效果示例
- 输入:
com.test.Student→ 输出:c.t.Student - 输入:
org.springframework.web.bind.annotation.GetMapping→ 输出:o.s.w.b.a.GetMapping - 输入:
User→ 输出:User
内容的提问来源于stack exchange,提问作者Naresh Muthyala
相关产品推荐
相关产品推荐

