You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

阿拉伯语字符串反转时英文数字位置异常的技术问询

问题分析与解决方案

你的问题出在直接对整个字符串执行反转操作:StringBuilder.reverse()会反转所有字符的顺序,包括空格和数字的位置,导致原本的句子结构被完全颠倒。而你的需求是仅反转阿拉伯语单词本身,同时保留数字、空格等内容的位置和顺序。

解决方案思路

  1. 将原字符串按空格分割为独立的内容块(token),阿拉伯语单词、数字分别作为单独的块
  2. 对每个内容块判断:如果是阿拉伯语单词,则反转该单词;否则直接保留原内容
  3. 将处理后的内容块按原顺序拼接成最终字符串

修改后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:40:26