阿拉伯语字符串反转时英文数字位置异常的技术问询
问题分析与解决方案
你的问题出在直接对整个字符串执行反转操作:StringBuilder.reverse()会反转所有字符的顺序,包括空格和数字的位置,导致原本的句子结构被完全颠倒。而你的需求是仅反转阿拉伯语单词本身,同时保留数字、空格等内容的位置和顺序。
解决方案思路
- 将原字符串按空格分割为独立的内容块(token),阿拉伯语单词、数字分别作为单独的块
- 对每个内容块判断:如果是阿拉伯语单词,则反转该单词;否则直接保留原内容
- 将处理后的内容块按原顺序拼接成最终字符串
修改后的代码
public static String reverseArabic(String text) { if (text == null) { return null; } // 按空格分割为独立内容块 String[] tokens = text.split(" "); StringBuilder result = new StringBuilder(); for (String token : tokens) { if (isArabic(token)) { // 仅反转阿拉伯语单词 result.append(new StringBuilder(token).reverse()); } else { // 数字、空格等非阿拉伯语内容直接保留 result.append(token); } result.append(" "); } // 移除最后多余的空格 if (result.length() > 0) { result.setLength(result.length() - 1); } return result.toString(); } // 调整判断逻辑:检查内容块是否全为阿拉伯语字符 public static boolean isArabic(String text) { if (text == null || text.isEmpty()) { return false; } for (int i = 0; i < text.length(); ) { int c = text.codePointAt(i); // 匹配阿拉伯语Unicode编码范围 if (!(c >= 0x0600 && c <= 0x06FF || c >= 0xFE70 && c <= 0xFEFF)) { return false; } i += Character.charCount(c); } return true; }
代码说明
- 分割字符串:通过
split(" ")把原句拆分为["قباطلا", "2", "جرب", "3"]这样的独立块 - 逐个处理:对每个块,用
isArabic判断是否为纯阿拉伯语单词,是则反转,否则直接保留 - 拼接结果:把处理后的块按原顺序拼接,最后移除多余的空格
测试你的示例字符串"قباطلا 2 جرب 3",处理后会得到预期输出"الطابق 2 برج 3"。
内容的提问来源于stack exchange,提问作者H. Ghass
相关产品推荐
相关产品推荐

