zoukankan      html  css  js  c++  java
  • Java 判断字符串的存储长度

    判断前台输入项的长度应该都会碰到String.length()  判断出来没有超出最大长度,存到数据库就超出长度的问题,oracle字符集是gbk的不太清楚,如果是UTF-8,中文是占三个字符的,所以要对中文进行特别判断。

    代码如下:

        public static int lengthOfUTF8(String value) {
            int valueLength = 0;
            if(value==null)
            {
            	return valueLength;
            }
            String chinese = "[u0391-uFFE5]";
            /* 获取字段值的长度,如果含中文字符,则每个中文字符长度为3,否则为1 */
            for (int i = 0; i < value.length(); i++) {
                /* 获取一个字符 */
                String temp = value.substring(i, i + 1);
                /* 判断是否为中文字符 */
                if (temp.matches(chinese)) {
                    /* 中文字符长度为3 */
                    valueLength += 3;
                } else {
                    /* 其他字符长度为1 */
                    valueLength += 1;
                }
            }
            return valueLength;
        }
        
        
        public static void main(String[] args)
        {
        	String str="abc中文d二";
        	
        	System.out.println("常规length:"+str.length());
        	System.out.println("占用数据库空间:"+StringUtil.lengthOfUTF8(str));
        }

    另外,在做测试的时候意外发现,如果在一个数据类型为 varchar2(4000)的字段里插入4000个中文字(for  update),会被截断,并且使用 length() 获取长度时,获得的结果 是1333,和我以前想的不一样,所以在sql中使用length() 判断是否还可以存储更多字符也是不准确的,可能有其他函数吧,以后再查。

  • 相关阅读:
    POJ 1320 Street Numbers 解佩尔方程
    数学分支(转)
    深入理解Java类加载器(1):Java类加载原理解析
    Java类加载器的工作原理
    深入理解Java:类加载机制及反射
    类加载机制:全盘负责和双亲委托
    java底层学习
    代码面试最常用的10大算法
    程序员面试金典算法题
    了解ASCII、gb系列、Unicode、UTF-8的区别
  • 原文地址:https://www.cnblogs.com/xcxcxcxc/p/5541138.html
Copyright © 2011-2022 走看看