精华内容
下载资源
问答
  • 现有一接口语句,用于数据接口维护,其中sql查询入参是使用的'${}'来标识的。...实现思路:1、参数值可能有多个,又是在字符串中,可以利用下标截取字符串的方式。2、找到字符串中相同的关键字,如 '${ 和 }' ...

    b28aebc07badd487276df06d91cac779.png

    现有一接口语句,用于数据集接口维护,其中sql查询入参是使用的'${}'来标识的。在实际使用过程中,需要将sql中的参数全部提取出来,那应该如何处理呢?经过资料查询,发现并没有现成的API可以直接使用,所以,这个轮子得自己来造。效率问题暂时不考虑,先实现功能,再做优化。

    实现思路:

    1、参数值可能有多个,又是在字符串中,可以利用下标截取字符串的方式。

    2、找到字符串中相同的关键字,如 '${ 和 }' ,利用两个下标值就能截取到实际的参数值

    3、查询全部'${的下标生成集合,查询全部}'的下标生成集合

    4、根据两个下标集合的一一匹配关系,截取字符串中的全部参数

    代码实现:

    1、查询一个字符串再另一个字符串中出现的下标

    /** * 查询一个字符串再另一个字符串中出现的下标 * @param str * @param key * @return */public static List searchAllIndex(String str, String key) { List allIndex=new ArrayList(); int a = str.indexOf(key);//*第一个出现的索引位置 while (a != -1) { allIndex.add(a); a = str.indexOf(key, a + 1);//*从这个索引往后开始第一个出现的位置 } return allIndex;}2、根据关键字 获取字符串中参数

    /** * 根据关键字 获取字符串中参数 * @param string * @param keyStart 如'${ * @param keyEnd 如 }' * @return */public static List getKeyListFromString(String string,String keyStart,String keyEnd){ // 返回数据 List allStringList=new ArrayList(); // 判断不为空 if(StringUtils.isNotBlank(string)){ // 去空格 string = string.replaceAll("\\\\s*",""); // 开始keyIndex集合 List firstIndex=searchAllIndex(string,keyStart); // 结束keyIndex集合 List endIndex=searchAllIndex(string,keyEnd); // 不为空 if(CollectionUtils.isNotEmpty(firstIndex)){ // 循环 for(int i=0;i

    010a6cea6e5f90237caa545263e82de3.png

    展开全文
  • java按字节截取字符串

    2019-08-21 14:58:11
    需求:oracle有个备注长度只有100,...方式一:这个其实和Oracle的配置是相关的,用以下语句查询当前数据库的字符集: 理论 select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET'; 可以得到如...

    需求:oracle有个备注长度只有100,但是不能扩大,只能截取java传输过程中的字符长度

    如何知道一个汉字在Oracle数据库中具体占用几个字节?

    方式一:这个其实和Oracle的配置是相关的,用以下语句查询当前数据库的字符集:

    理论

    	select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET';
    

    可以得到如下结果:
    如果value=ZHS16GBK,那么一个汉字占用2个字节,
    如果value=AL32UTF8,那么一个汉字占用3个字节(这是Oracle数据库默认的)。

    实际

    所以可以看出我的数据库是占用2个字节
    在这里插入图片描述

    方式二:查看oracle server端字符集

    理论

    select userenv('language') from dual;
    

    如果结果是下面这样的,一个汉字就占用两个字节
    SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    如果结果是下面这样的,那么一个汉字就占用三个字节
    SIMPLIFIED CHINESE_CHINA.AL32UTF8

    实际

    在这里插入图片描述

    方式三:也可以尝试用以下语句查询一个汉字占用的字节长度

    理论

    直接可以查看对应字符的长度(空格是1个长度)

    select lengthb('你') from dual;
    

    实际

    在这里插入图片描述

    java

    实现代码

    package com.zjnac.restfulapi.util;
    
    import java.io.IOException;
    
    /**
     * @ClassName CutStringUtil
     * @Description 按字节截取字符串
     * @Author Duplicator
     * @Date 2019/8/21 14:38
     * @Version 1.0
     **/
    public class CutStringUtil {
    
        public static void main(String[] args) throws IOException {
    
            String str = "ab你好cd谢谢";
            int len = str.getBytes("gbk").length;
            for (int x = 0; x < len; x++) {
                System.out.println("截取" + (x + 1) + "字节结果时:"
                        + cutStringByGBK(str, x + 1));
            }
            String str1 = "ab你好cd杮";
            int len1 = str.getBytes("gbk").length;
            for (int x = 0; x < len1; x++) {
                System.out.println("截取" + (x + 1) + "字节结果时:"
                        + cutStringByUTF8(str1, x + 1));
            }
        }
    
        // 使用UTF-8编码表进行截取字符串,一个汉字对应三个负数,一个英文字符对应一个正数
        public static String cutStringByUTF8(String str, int len) throws IOException {
            if(str==null){
                return null;
            }
            //前提不知道str他的长度,而指定的len长于实际str长度数组下标超过异常
            int actualLen = str.getBytes("gbk").length;
            if(actualLen<len){
                len = actualLen;
            }
            byte[] buf = str.getBytes("utf-8");
            int count = 0;
            for (int x = len - 1; x >= 0; x--) {
                if (buf[x] < 0) {
                    count++;
                } else {
                    break;
                }
            }
            if (count % 3 == 0) {
                return new String(buf, 0, len, "utf-8");
            } else if (count % 3 == 1) {
                return new String(buf, 0, len - 1, "utf-8");
            } else {
                return new String(buf, 0, len - 2, "utf-8");
            }
        }
    
        // 使用GBK编码表进行字符串的截取,一个英文字符对应码表一个正数,一个汉字对应两个负数
        public static String cutStringByGBK(String str, int len)
                throws IOException {
            if(str==null){
                return null;
            }
            int actualLen = str.getBytes("gbk").length;
            if(actualLen<len){
                len = actualLen;
            }
            byte[] buf = str.getBytes("gbk");
            int count = 0;
            for (int x = len - 1; x >= 0; x--) {
                //统计按字节截取的字符串中,中文字符串有几个字节
                //小于0的是中文的部分
                if (buf[x] < 0) {
                    count++;
                } else {
                    break;
                }
            }
            if (count % 2 == 0) {
                return new String(buf, 0, len, "gbk");
            } else {
                return new String(buf, 0, len - 1, "gbk");
            }
        }
    }
    
    
    展开全文
  • 一:基于hql语法查询结果为实体类集合。String hql = " from 实体类名" ;List list = ygDeptService.findByHql(hql); //查询结果数据JSONArray js = JSONArray.fromObject(list);HttpServletResponse ...

    一:基于hql语法查询到的结果集为实体类集合。

    String hql = " from 实体类名" ;

    List list = ygDeptService.findByHql(hql);       //查询到的结果数据集

    JSONArray js = JSONArray.fromObject(list);

    HttpServletResponse response=ServletActionContext.getResponse();

    response.setContentType("application/json;charset=utf-8"); //防乱码

    PrintWriter out = response.getWriter();

    out.print(js.toString());   //向前端打印传送JSON

    out.flush();

    out.close();

    二:基于sql语法查询到的结果集为数组集合。

    String sql = "select * from 表名";

    List list = ygDeptService.findBySql(sql);

    String result= list.toString();

    result= depts2.replace("=", ":")     //转换成json字符串格式,具体格式可参考下面例子。

    HttpServletResponse response=ServletActionContext.getResponse();

    response.setContentType("application/json;charset=utf-8"); //防乱码

    PrintWriter out = response.getWriter();

    out.print(result);

    out.flush();

    out.close();

    传送的JSON格式如下,如不行请按下面格式对查询到的数据进行字符串格式转换。

    [{"id":103, "parentid":31, "name":"豸冈社区义工服务站"}, {"id":120, "parentid":26, "name":"新昌义工服务站"}]

    展开全文
  •  在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出'b'。 思路  创建哈希表,键值key为字符,值value为出现次数。第一遍扫描:对每个扫描到的字符的次数加一;第二遍扫描:对每个扫描到的字符...

    本文参考自《剑指offer》一书,代码采用Java语言。

    更多:《剑指Offer》Java实现合集  

    题目 

      在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出'b'。

    思路

      创建哈希表,键值key为字符,值value为出现次数。第一遍扫描:对每个扫描到的字符的次数加一;第二遍扫描:对每个扫描到的字符通过哈希表查询次数,第一个次数为1的字符即为符合要求的输出。

      由于字符(char)是长度为8的数据类型,共有256中可能,因此哈希表可以用一个长度为256的数组来代替,数组的下标相当于键值key,对应字符的ASCII码值;数组的值相当于哈希表的值value,用于存放对应字符出现的次数。

    测试算例 

      1.功能测试(存在/不存在只出现一次的字符;全部都为只出现一次的字符)

      2.特殊测试(null)

    Java代码

    //题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出
    //'b'。
    
    public class FirstNotRepeatingChar {
    	public char firstNotRepeatingChar(String str) {
    		if(str==null)
    			return '\0';
    		int[] repetitions = new int[256];
    		for(int i=0;i<256;i++)
    			repetitions[i]=0;
    		for(int i=0;i<str.length();i++) {
    			int loc=(int) str.charAt(i);
    			repetitions[loc]+=1;
    		}
    		for(int i=0;i<str.length();i++) {
    			int loc=(int) str.charAt(i);
    			if(repetitions[loc]==1)
    				return (char)loc;
    		}
    		return '\0';
    	}
    	
    	public static void main(String[] args) {
    		FirstNotRepeatingChar demo =new FirstNotRepeatingChar();
    		System.out.println((demo.firstNotRepeatingChar("google")=='l'));
    		System.out.println((demo.firstNotRepeatingChar("aabccdbd")=='\0'));
    		System.out.println((demo.firstNotRepeatingChar("$abcdefg")=='$'));
    		System.out.println((demo.firstNotRepeatingChar(null)=='\0'));
    	}
    }
    

      

      

    收获

      1.如果需要创建哈希表,键值为 字符,值为 数字时,可以考虑用数组(length=256)来替代,数组下标表示为字符的ASCII码值。

      2.哈希表的时间复杂度为O(1),要求有较高的查找速度时,可以考虑使用哈希表(Java中可以使用HashMap)

      3.如果需要判断多个字符是否在某个字符串中出现过,或者统计多个字符在某个字符串中出现的次数,可以考虑基于数组创建一个简单的哈希表,这样可以用很小的空间消耗换来时间效率的提升。

     

     

    更多:《剑指Offer》Java实现合集  

      

    转载于:https://www.cnblogs.com/yongh/p/9954083.html

    展开全文
  • 原因:是数据库的字符集使用的是 utf-8 mb4 解决办法:去除Emoji表情 /** 判断字符串是否含有Emoji表情 **/ private boolean isHasEmoji(String reviewerName) { Pattern pattern = Pattern.compile("[\u...
  • 在项目中做查询时一般使用:sql或者hql,今天分别介绍一下怎么把sql或者hql查询出来的结果转换成json字符串的形式: 1.首先在DAO里面需要有支持sql或者hql查询的方法 a).sql语句的查询方法 [code="java&...
  • 要求根据查询条件返回每个用户对于欠费量、欠费金额、欠费次数、欠费期间(欠费期间是多个以,分割) [code="java"]select m.yqzh,max(m.hz_mc),sum(m.sl),sum(m.yje),sum(m.num),max(m.dzms), ...
  • 部分正则表达式: i:忽略大小写 m:多行查找 x:设置 x 选项后,正则...类似但不等价于“[A-Za-z0-9_]”,这里"单词"字符使用Unicode字符集查询 dev 集合中 title 字段以'S'开头数据 ...
  • 表和字段使用utf8字符集和utf8_bin排序规则.如果我通过IDE或命令行手动运行插入,则字符串将按预期保存.INSERT INTO utf8Table VALUES('Анатолий Солоницын');然后,我可以查询该表,并且还可以返回...
  • 部分正则表达式:i:忽略大小写m:多行查找x:设置x选项后,...类似但不等价于“[A-Za-z0-9_]”,这里"单词"字符使用Unicode字符集查询dev集合中title字段以'S'开头数据db.dev.find({title:/^S/});db.dev.find({...
  • 所以我最终使用解决方案是创建两个@NamedQuerys,一个用于结果,一个用于计数,但是以静态字符串捕获基本查询以维护DRY,并确保两个查询保持一致。所以对于上述,我会有一些像:@NamedQuery(name = "getAccounts...
  • 字符类型 char 1~2000字节 固定长度字符串,长度不够用空格补充 varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) ...
  • 作者:余枫问题描述从上游Oracle数据库中导出携带中文乱码且编码为ISO-8859-1数据文件,将导出数据文件导入到Hive表,在原始表基础上通过创建视图,按照与上游接口约定定长方式拆分字段时报错,异常...
  • 现在我想将结果对象转换为包含相同五个字符串的java POJO类。有没有任何方式在JPA中直接将该结果转换为POJO对象列表?我来到以下解决方案。@NamedNativeQueries({@NamedNativeQuery(name = "nativeSQL",query = ...
  • java中 sql查询结果转换成javabean

    千次阅读 2017-06-30 18:54:08
    1. hibernateaddEntity(),addScalar()等方式 2. 今天碰到,因为接收到值是一个json格式字符串{"org_no":xxx,"sys_no":"xxx","age":11}之类格式 先去除了key下划线 转换成javabean
  • Java 组合查询

    2015-10-25 16:56:22
    常见的字符集有ASCI字符集、 GB2312字符集(简体中文)、BIG5字符集(繁体中文)、UnicodeI字符集等。。。  2、什么事字符编码? 3、字库表(character repertoier): 是一个相当于所有可读或者
  • 1、将JSON字符串转换成List结果集的方式://查询结果 PageDatums picPageDatums = pictureLibraryService.selectPagePictureForService(pageDatums, pictureLibrary); String picLibraryJson = picPageDatums....
  • HIVE与GB2312字符集

    千次阅读 2011-11-17 14:57:02
    HIVE Driver类在处理字符串时,是按照UTF-8来处理,但是HIVEJDBC确没有强制按照UTF-8来处理,所以会发生中文字符无论是UTF8还是GB2312都会在JDBC查询时,都不能正确输出。  在Linux下Java的FileWriter默认是...
  • 连接字符串加上charset=eucgb&jconnect_version=0例如:jdbc:sybase:Tds:server:port/database?charset=eucgb&jconnect_version=0eucgb是简体中文字符集,不支持繁体中文。或者使用如下配置:jdbc:sybase:...
  • 实现一个拷贝文件工具类要使用字节流还是字符串 Java面试题13.线程的的实现方式?怎么启动线程?怎么区分线程? Java面试题14.线程并发库和线程池作用 Java面试题15.设计模式和常用设计模式 Java面试题16....
  • 7、如果步骤6是执行新增、修改、删除操作那么返回是影响行数,如果是执行查询操作,接着步骤8:8、解析结果ResultSet;9、关闭结果ResultSet、关闭Statement、关闭数据库连接。上代码:public static void ...
  • 连接字符串加上charset=eucgb&jconnect_version=0例如:jdbc:sybase:Tds:server:port/database?charset=eucgb&jconnect_version=0 eucgb是简体中文字符集,不支持繁体中文。 或者使用如下配置: jdbc:...
  • 实现一个拷贝文件类使用字节流还是字符串.mp4 │ Java面试题13.线程实现方式 怎么启动线程怎么区分线程.mp4 │ Java面试题14.线程并发库和线程池作用?.mp4 │ Java面试题15.设计模式和常用设计模式.mp4 │ ...
  • Java数据库连接与查询

    2017-11-21 18:55:00
    5、创建sql语法字符串; 6、执行; 7、如果步骤6是执行新增、修改、删除操作那么返回是影响行数,如果是执行查询操作,接着步骤8: 8、解析结果ResultSet; 9、关闭结果ResultSet、关闭Statement、关闭...
  • 用MyBatis结果拦截器做过这样一个需求:由于项目需求经常变动,项目MySQL数据库都是存放JSON字符串,例如:用户基本信息随着版本升级可能会有变动数据表CREATE TABLE `account` (`id` bigint(11) unsigned NOT ...
  • 首先是讲一下主要实现思想:1、在函数中先获取到查询条件(即当前或目标日期字符串)2、把字符串转换成数据库里用Date类型 3、构建查询语句并且执行获得目标数据。 代码如下:   //定义查询结果  List ...
  • 一、自定义注解场景及实现 注解Annotation实现原理与自定义注解例子 ...请注意,查询字符串(名称/值对)是在 GET 请求 URL 中发送: /test/demo_form.asp?name1=value1&amp;name2=value2 有关...
  • 我需要隐藏其isActive标志设置为false所有用户相关...假设我有两个集合:用户联系用户包含以下字段:名字(字符串)姓氏(String)isActive(布尔)联系人集合包含以下字段:Contacter(User)声明为DBref类型 .Contacte...
  • Java案例开发锦

    2008-03-04 09:47:42
    案例5 字符串的查找与替换 案例6 利用RandomAccessFile类来实现文件追加 案例7 用Zip进行多文件保存 案例8 用JUNIT建立测试类 案例9 用Java保存位图文件 案例10 获取文件属性 第六章 Java与...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 300
精华内容 120
关键字:

java查询字符串的字符集

java 订阅