java - 如何在java中将包含从左到右和从右到左语言的字符串添加到StringBuilder

标签 java stringbuilder

我对 Java 中的 StringBuilder 感到困惑。 我的代码在这里:

StringBuilder cmdB = new StringBuilder(
            "INSERT IGNORE INTO Query ( context, category, generality, freshness, TokenCount, type) VALUES ");
    for (int i = 0; i < querydata.size(); i++) {

        if (i == 0)
            cmdB.append("('");
        else
            cmdB.append(",('");
        cmdB.append(querydata.get(i).getContext() + "',"
                + querydata.get(i).getCategory() + ","
                + querydata.get(i).getGenerality() + ","
                + querydata.get(i).getFreshness() + ","
                + querydata.get(i).getTokenCount() + ","
                + querydata.get(i).getType());
        cmdB.append(")");
    }
    cmdB.append(";");

我有 Mysql 作为数据库,想创建插入 1000 行的字符串。 querydata.get(i).getContext() 返回字符串并包含英语(从左到右)和波斯语(从右到左的语言)。

当我的 querydata.get(i).getContext() 返回“دانلود کرک باوی ghost recon”时,我的 Stringbuilder 添加它并入。我的结果如下所示。

INSERT IGNORE INTO Query (context, category, generality, freshness, TokenCount, type) VALUES ('پخش نده ووتبال',2,1.0,0.0,2,1),('عکسهای جشنواره وواره وواره وواره ویلمووتبال',2 ,1.0 ,0.0,2,1),('نتایو لیگ برتر',2,1.0,0.0,2,1),('دانلود کرک los 幽灵行动',2,1.0,0.0,2,1).

最佳答案

逻辑顺序而言,字符串的内容实际上没有任何问题,据我所知,可能让您感到困惑的是当您打印它。如果将鼠标拖到字符串上,您可以通过选择跳转的方式看到正在以哪种主要方向呈现的文本运行。

如果我用换行符分隔值集

INSERT IGNORE INTO Query (context, category, generality, freshness, TokenCount, type) VALUES
('پخش نده 径',2,1.0,0.0,2,1),
('عکسهای وشنواره فیلم وور',2,1.0,0.0,2,1),
('نتایج لیگ برتر',2,1.0,0.0,2,1),
('دانلود کرک باوی ghost recon',2,1.0,0.0,2,1)。

我不确定您在浏览器中看到了什么,但在我的浏览器中,它将 INSERT INTO ... VALUES 行视为 LTR,然后是后续行,但不包括包含 ghost recon 主要是 RTL。这是在波斯文字部分周围插入了 Unicode 从左到右标记 (U+200E) 的相同字符串,以强制将周围的引号和括号视为 LTR:

INSERT IGNORE INTO Query (context, category, generality, freshness, TokenCount, type) VALUES
('پخش نده وتبال ',2,1.0,0.0,2,1),
(' عکسهای ͼنواره فیلم وور ',2,1.0,0.0,2,1),
(' نتاوو لیگ برتر ',2,1.0,0.0,2,1),
(' دانلود کرک باوی 幽灵行动',2,1.0,0.0,2,1).

换句话说 - 别担心,数据库会包含正确的内容。

但我也同意this answer您应该考虑使用 PreparedStatement 而不是使用 StringBuilder 构建 SQL,以防止在任何上下文字符串包含撇号(其中发生的次数比想的要多。

关于java - 如何在java中将包含从左到右和从右到左语言的字符串添加到StringBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14101265/

相关文章:

java - 历史记录队列 - readDocument().isPresent() 在值存在时返回 false

java - struts Controller 和服务层?

java - 在 Java 中读取 CLOB 到 String 和 String 到 CLOB 的最有效解决方案?

c# - 为什么 StringBuilder 的默认容量是 16 个字符?

java - 将 AWS SageMaker 机器学习模型转换为 Java 库

Java .isDirectory() 在没有扩展名的文件上也返回 true

java - 如何在java类中包含接口(interface)

php - 用于 PHP 的字符串生成器

c# - 将 StringBuilder 流式传输到文件

java - 为什么不让 StringBuilder 和 StringBuffer 实现一个公共(public)接口(interface)呢?