java - 如何在java中为UTF8字符串做子串?

标签 java oracle substring

假设我有以下字符串:Rückruf ins Ausland 我需要将它插入到最大大小为 10 的数据库中。 我在 java 中做了一个普通的子字符串,它提取了这个字符串 Rückruf in 这是 10 个字符。当它尝试插入此列时,出现以下 oracle 错误:

java.sql.SQLException: ORA-12899: value too large for column "WAEL"."TESTTBL"."DESC" (actual: 11, maximum: 10) The reason for this is that the database has a AL32UTF8 character set thus the ü will take 2 chars.

我需要在 java 中编写一个函数来执行此子字符串,但考虑到 ü 占用 2 个字节,因此在这种情况下返回的子字符串应该是 Rückruf i(9 个字符)。有什么建议吗?

最佳答案

如果你想在 Java 中修剪数据,你必须编写一个函数来使用使用的 db 字符集修剪字符串,就像这个测试用例:

package test;

import java.io.UnsupportedEncodingException;

public class TrimField {

    public static void main(String[] args) {
        //UTF-8 is the db charset
        System.out.println(trim("Rückruf ins Ausland",10,"UTF-8"));
        System.out.println(trim("Rüückruf ins Ausland",10,"UTF-8"));
    }

    public static String trim(String value, int numBytes, String charset) {
        do {
            byte[] valueInBytes = null;
            try {
                valueInBytes = value.getBytes(charset);
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e.getMessage(), e);
            }
            if (valueInBytes.length > numBytes) {
                value = value.substring(0, value.length() - 1);
            } else {
                return value;
            }
        } while (value.length() > 0);
        return "";

    }

}

关于java - 如何在java中为UTF8字符串做子串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455706/

相关文章:

java - 获取列表元素的组合列表

oracle - ORA-01741 用于带有不可见字段和隐式约束的 DBMS_REDEFINITION

HTML 实体解码为特殊字符

mysql - 需要查询逻辑方面的帮助

python - Elasticsearch子字符串查询的一种特殊情况

java - ExecutorService 空闲任务

java - Java 中是否有类似于 PHP 的三元运算符的简短版本?

java - 井字棋建议走法

.net - OracleMTSRecoveryService 启动失败?

sql-server - 如何在SQL中的2个相同字符之间选择一个字符串