精华内容
下载资源
问答
  • Java在字符串中查找匹配的子字符串

    万次阅读 多人点赞 2017-05-07 15:25:25
    Java在字符串中查找匹配的子字符串

    示例:
           在源字符串“You may be out of my sight, but never out of my mind.”中查找“my”的个数。输出:匹配个数为2

    三种方法:
           1.通过String的indexOf方法
           2. 通过正则表达式
           3. 通过String的split方法
    其中第一种方法只能用于精确匹配,第二三种则可以模糊匹配(方法3的参数为正则表达式)。例如:若将child改为“.my.”,第一种方法失效。

    方法1:通过String的indexOf方法

    public int indexOf(int ch, int fromIndex) :返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。如果不存在则返回 -1。

    //方法1、通过String的indexOf(String str, int fromIndex)方法
    	private void matchStringByIndexOf( String parent,String child )
    	{
    		int count = 0;
    		int index = 0;
    		while( ( index = parent.indexOf(child, index) ) != -1 )
    		{
    			index = index+child.length();
    			count++;
    		}
    		System.out.println( "匹配个数为"+count );							  //结果输出
    	}
    

    方法2:通过正则表达式

    类 Pattern :正则表达式的编译表示形式。
           指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
           因此,典型的调用顺序是
           Pattern p = Pattern.compile(“a*b”);
           Matcher m = p.matcher(“aaaaab”);
           boolean b = m.matches();

    • 类 Matcher:通过调用模式的 matcher 方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作:
             matches 方法尝试将整个输入序列与该模式匹配。
             lookingAt 尝试将输入序列从头开始与该模式匹配。
             find 方法扫描输入序列以查找与该模式匹配的下一个子序列
    //方法2、通过正则表达式
    	private void matchStringByRegularExpression( String parent,String child )
    	{
    		
    		int count = 0;
    		Pattern p = Pattern.compile( child );
    		Matcher m = p.matcher(parent);
    		while( m.find() )
    		{
    			count++;
    			System.out.println( "匹配项" + count+":" + m.group() ); //group方法返回由以前匹配操作所匹配的输入子序列。
    		}
    		System.out.println( "匹配个数为"+count );							  //结果输出
    	}
    

    方法3:通过String的split方法

    public String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。 该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。

    //方法3、通过split方法
    	private void matchStringBySplit( String parent,String child )
    	{
    		String[] array = parent.split(child);
    		System.out.println( "匹配个数为" + (array.length-1) );
    	}
    

    完整代码:

    import java.util.Arrays;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * 在字符串中查找匹配的子字符串
     * author:大能豆   QQ:1023507448
     * case :
     * 源字符串:You may be out of my sight, but never out of my mind.
     * 要查找的子字符串:my
     * 输出:匹配个数为2
     */
    public class MatchString {
    
        //方法1、通过String的indexOf(String str, int fromIndex)方法
        private void matchStringByIndexOf(String parent, String child) {
            int count = 0;
            int index = 0;
            while ((index = parent.indexOf(child, index)) != -1) {
                index = index + child.length();
                count++;
            }
            System.out.println("匹配个数为" + count);//结果输出
        }
    
        //方法2、通过正则表达式
        private void matchStringByRegularExpression(String parent, String child) {
            int count = 0;
            Pattern p = Pattern.compile(child);
            Matcher m = p.matcher(parent);
            while (m.find()) {
                count++;
                System.out.println("匹配项" + count + ":" + m.group()); //group方法返回由以前匹配操作所匹配的输入子序列。
            }
            System.out.println("匹配个数为" + count); //结果输出
        }
    
        //方法3、通过split方法,但此方法需考虑子字符串是否是在末尾,若在末尾则不需要-1
        private void matchStringBySplit(String parent, String child) {
            String[] array = parent.split(child);
            System.out.println("匹配个数为" + (array.length - 1));
        }
    
        public static void main(String[] args) {
            MatchString ms = new MatchString();
            String parent = "You may be out of my sight, but never out of my mind.";
            String child = "my";
    
            System.out.println("------通过indexOf-------");
            ms.matchStringByIndexOf(parent, child);  //调用方法1
    
            System.out.println("------通过正则表达式-------");
            ms.matchStringByRegularExpression(parent, child);  //调用方法2
    
            System.out.println("------通过split方法-------");
            ms.matchStringBySplit(parent, child);  //调用方法3
    
            String test = "abcdbdasda";
            String[] as = test.split("a");
            System.out.println(Arrays.toString(as));
        }
    
    }
    
    
    展开全文
  • Oracle中字符串截取最全方法总结

    万次阅读 多人点赞 2018-08-30 18:10:42
    string:表示字符串,即要截取的字符串。 start:开始位置,从1开始查找。如果start是负数,则从string字符串末尾开始算起。 length:可选项,表示截取字符串长度。 示例: SELECT SUBSTR('Hello SQL!', 1) ...
    • substr 函数:截取字符串

    语法:SUBSTR(string,start, [length])

    string:表示源字符串,即要截取的字符串。

    start:开始位置,从1开始查找。如果start是负数,则从string字符串末尾开始算起

    length:可选项,表示截取字符串长度。

    示例

    SELECT SUBSTR('Hello SQL!', 1) FROM dual     --截取所有字符串,返回'Hello SQL!'
    SELECT SUBSTR('Hello SQL!', 2) FROM dual     --从第2个字符开始,截取到末尾。返回'ello SQL!'
    SELECT SUBSTR('Hello SQL!', -4) FROM dual    --从倒数第4个字符开始,截取到末尾。返回'SQL!'
    SELECT SUBSTR('Hello SQL!', 3, 6) FROM dual  --从第3个字符开始,截取6个字符。返回'llo SQ'
    SELECT SUBSTR('Hello SQL!', -4, 3) FROM dual --从倒数第4个字符开始,截取3个字符。返回'SQL'
    • instr 函数:返回子字符串在源字符串中的位置

    语法:INSTR(string,child_string,[start],[show_time])

    string:表示源字符串。

    child_string:子字符串,即要查找的字符串。

    start:可选项,开始位置,默认1开始。如果为负数,则从右向左检索。

    show_time:可选项,表示子字符串第几次出现在源字符串当中,默认1次,负数则报错

    示例

    --表示从源字符串'city_company_staff'中第1个字符开始查找子字符串'_'第1次出现的位置
    SELECT INSTR('city_company_staff', '_') FROM dual    --返回5
    
    --表示从源字符串'city_company_staff'中第5个字符开始查找子字符串'_'第1次出现的位置
    SELECT INSTR('city_company_staff', '_', 5) FROM dual    --返回5
    
    --表示从源字符串'city_company_staff'中第5个字符开始查找子字符串'_'第1次出现的位置
    SELECT INSTR('city_company_staff', '_', 5, 1) FROM dual    --返回5
    
    --表示从源字符串'city_company_staff'中第3个字符开始查找子字符串'_'第2次出现的位置
    SELECT INSTR('city_company_staff', '_', 3, 2) FROM dual    --返回13
    
    --start参数为-1,从右向左检索,查找'_'字符串在源字符串中第1次出现的位置
    SELECT INSTR('city_company_staff', '_', -1, 1) FROM dual    --返回13
    
    --start参数为-6,从右向左检索,查找'_'字符串在源字符串中第2次出现的位置
    SELECT INSTR('city_company_staff', '_', -6, 2) FROM dual    --返回5
    
    • substr 函数结合 instr 函数截取字符串

    现有需求:数据查询处理需要对code进行"拆分"

    code命名规则类似:城市_所属公司_员工职位_员工姓名

    其中,城市、公司、职位、姓民字符串长度不固定,由于字符串长度不固定,只使用substr函数无法实现需求,需配合instr函数定位到字符'_'的位置,然后使用substr函数进行截取。详细见下面例子。

    表数据如下:

    SOURCE_CODE
    BJ_BAIDU_CEO_LY
    SH_BOKE_MANAGER_LWX
    HRB_WM_CASHIER_OYZY

    获取城市

    SELECT
    	SUBSTR (SOURCE_CODE, 1, INSTR (SOURCE_CODE, '_', 1, 1) - 1) AS CITY
    FROM
    	TABLE_CODE_TEST

    结果

    解释:此处截取源字符串SOURCE_CODE,从第1个字符开始,由于代表城市的code长度不固定,我们无法确定截取几个字符,所以使用instr函数判断第一个'_'字符的位置,进而确定每个SOURCE_CODE截取几个字符串。

    那为什么减1呢

    是因为INSTR (SOURCE_CODE, '_', 1, 1)获取的是源字符串中'_'字符第一次出现的位置,再减1就得出了CITY字符个数。

    获取公司:

    SELECT
    	SUBSTR (
    		SOURCE_CODE, 
    		INSTR (SOURCE_CODE, '_', 1, 1) + 1, 
    		INSTR (SOURCE_CODE, '_', 1, 2) - INSTR (SOURCE_CODE, '_', 1, 1)-1
    	) AS COMPANY
    FROM
    	TABLE_CODE_TEST

    结果:

    解释:截取源字符串,从(第一个'_'出现位置+1)开始,截取个数为:第2个'_'出现位置减去第1个'_'出现位置,此时还多了一个下划线'_',再减去1即可得到代表公司字符串。

    获取姓名:

    SELECT
    	SUBSTR (SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 3) + 1) AS STF_NAME
    FROM
    	TABLE_CODE_TEST

    结果:

    解释:截取源字符串,从('_'第3次出现位置+1)开始截取,截取到末尾。

     

    展开全文
  • 在 日期和时间模式字符串 ,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。所有其他字符均不解释;只是在格式化时将...

    日期和时间格式由 日期和时间模式字符串 指定。在 日期和时间模式字符串 中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串
    白话文的讲:这些A——Z,a——z这些字母(不被单引号包围的)会被特殊处理替换为对应的日期时间,其他的字符串还是原样输出。

    日期和时间模式(注意大小写,代表的含义是不同的)

    yyyy:年
    MM:月
    dd:日
    hh:1~12小时制(1-12)
    HH:24小时制(0-23)
    mm:分
    ss:秒
    S:毫秒
    E:星期几
    D:一年中的第几天
    F:一月中的第几个星期(会把这个月总共过的天数除以7)
    w:一年中的第几个星期
    W:一月中的第几星期(会根据实际情况来算)
    a:上下午标识
    k:和HH差不多,表示一天24小时制(1-24)。
    K:和hh差不多,表示一天12小时制(0-11)。
    z:表示时区  

    (2017-12-28日,更新)

    因为看到了Java 8 里面对日期的格式化操作的API,回头又看了看这个以前的日期格式化。发现,文中的实例不是很全面。不符合湿胸的性格,特地来完善一下。

        private static void formatDataTest() {
            /*
             * 日期转期望格式的字符串
             */
            //HH 和 hh 的差别:前者是24小时制,后者是12小时制。
            StringBuilder sb = new StringBuilder();
            sb.append("yyyy年MM月dd日 HH:mm:ss")
                    .append(" 上下午标志 a")
                    .append(" E")
                    .append(" 一年中的第D天")
                    .append(" 一月中的第F个星期")
                    .append(" 一年中的第w个星期")
                    .append(" 一月中的第W个星期")
                    .append(" Z")
                    .append(" z");
            SimpleDateFormat sdf = new SimpleDateFormat(sb.toString());
            String dateString = sdf.format(new Date());
            System.out.println(dateString);
            /*
             * 字符串转日期
             */
            Date date;
            try {
                date = sdf.parse(dateString);
                System.out.println(date);
            } catch (ParseException e) {
                System.out.println(e.getMessage());
            }
        }

    运行结果:

    2017年12月28日 18:21:731 上下午标志 下午 星期四 一年中的第362天 一月中的第4个星期 一年中的第52个星期 一月中的第5个星期 +0800 CST
    Thu Dec 28 18:21:00 CST 2017

    这里多说一句,一个月中的第几个星期,  F   这个出来的结果,不靠谱,具体我就在这多做测试啦,我是测试过,才这么说的,还是后面的那个  W  靠谱。

    (更新完成)

    具体简单常见的实例:

    package com.lxk.DateFormat;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * Created by lxk on 2016/11/4
     */
    public class Format {
        public static void main(String[] args) {
            Date ss = new Date();
            System.out.println("一般日期输出:" + ss);
            System.out.println("时间戳:" + ss.getTime());
            //Date aw = Calendar.getInstance().getTime();//获得时间的另一种方式,测试效果一样
            SimpleDateFormat format0 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String time = format0.format(ss.getTime());//这个就是把时间戳经过处理得到期望格式的时间
            System.out.println("格式化结果0:" + time);
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
            time = format1.format(ss.getTime());
            System.out.println("格式化结果1:" + time);
        }
    }
    

    测试结果图:

    需要什么格式,自己拼好字符串,就可以格式化日期啦。授人以渔呀有木有。

    喷子们要是觉得简单呢,就省省唾沫星子吧。我就记个笔记用。

    上面的是:日期转自己想要的字符串格式,下面是字符串转日期类型

        private static void testStringToDate() {
            String s = "2017-05-25";
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            Date date = null;
            try {
                date = format.parse(s);
            } catch (ParseException e) {
                System.out.println(e.getMessage());
            }
            System.out.println(date);
        }

    下面是运行的debug截图。

    上面的那个  日期和时间模式  是按我们常用的年月日时分秒来放的,下面传个别人的专业的图,供参考。

    定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留):

    我写完文章,给自己点个赞,不过分吧,
    不过分,那我可就点啦啊。
    我先点为敬,你们随意。大家随意。不要客气。。。

    展开全文
  • python从字符串中提取数字

    万次阅读 多人点赞 2018-05-14 14:43:16
    ## ^ 匹配字符串的开始。 ## $ 匹配字符串的结尾。 ## \b 匹配一个单词的边界。 ## \d 匹配任意数字。 ## \D 匹配任意非数字字符。 ## x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符)。 ## x* ...

    1、使用正则表达式,用法如下:

    ## 总结
    ## ^ 匹配字符串的开始。
    ## $ 匹配字符串的结尾。
    ## \b 匹配一个单词的边界。
    ## \d 匹配任意数字。
    ## \D 匹配任意非数字字符。
    ## x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符)。
    ## x* 匹配0次或者多次 x 字符。
    ## x+ 匹配1次或者多次 x 字符。
    ## x{n,m} 匹配 x 字符,至少 n 次,至多 m 次。
    ## (a|b|c) 要么匹配 a,要么匹配 b,要么匹配 c。
    ## (x) 一般情况下表示一个记忆组 (remembered group)。你可以利用 re.search 函数返回对象的 groups() 函数获取它的值。
    ## 正则表达式中的点号通常意味着 “匹配任意单字符”
    

    2、解题思路:

    • 既然是提取数字,那么数字的形式一般是:整数,小数,整数加小数;

    • 所以一般是形如:----.-----;

    • 根据上述正则表达式的含义,可写出如下的表达式:"\d+.?\d*";

      • \d+ 匹配1次或者多次数字,注意这里不要写成*,因为即便是小数,小数点之前也得有一个数字;
      • \.? 这个是匹配小数点的,可能有,也可能没有;
      • \d* 这个是匹配小数点之后的数字的,所以是0个或者多个;

    3、代码如下:

    # -*- coding: cp936 -*-
    import re
     
    string="A1.45,b5,6.45,8.82"
    print re.findall(r"\d+\.?\d*",string)
     
    # ['1.45', '5', '6.45', '8.82']
    
    展开全文
  • Python字符串表示方法

    万次阅读 2021-04-10 19:27:55
    字符串表示方法 基本表示方法 字符串有多种形式,可以使用单引号('...'),双引号("...")都可以获得同样的结果。反斜杠 \ 可以用来转义: print('"Isn\'t," they ...字符串中的回车换行会自动包含到字符串中
  • 输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符 比如输入“They are students." 删除之后的第一个字符串变成"The r stdnts." 思路是利用每个字符都有其对应的ASCII码值,将需要删除的字符的ascii为...
  •  主要是python中字符串的几种表达,表示方式。 python的几种表达方式  1 使用单引号扩起来字符串 >>> 'my python lession' #以单引号将字符串扩起来 'my python lession' >>> ...
  • 什么是模板字符串 它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。...如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之。 $('#list').htm
  • 举个例子>>> s = u'\u6ce8\u91ca' >>> s u'\u6ce8\u91ca' >>> print s 注释 ...注释字符串前加u表示为unicode编码,而当前文本的unicode编码 可以设定, 比如utf-8编码就是第一行加上:# -*- coding:
  • 字符串字符串数组

    万次阅读 多人点赞 2019-03-04 13:42:04
    文章目录字符串字符串输出字符串常用方法计算字符串的长度字符串拼接字符串拷贝字符串比较字符串数组 字符串 用双引号引起来的就是字符串字符串由字符组成 字符串使用%s格式化输出 字符串以\0结尾,没有\0就不是...
  • js 判断字符串中是否包含某个字符串 #1 indexOf方法 //str.indexOf("")的值为-1时表示不包含 var str = "hello Tara"; if(str.indexOf("Tara") !== -1){ ...
  • C语言中字符串字符串的结束标志

    千次阅读 2020-06-19 13:52:16
    在C语言,是将字符串作为字符数组来处理的,也就是使用一个一维字符数组来存放字符串字符串中的字符是逐个存放在数组元素的。 我们在讨论字符串长度的时候实际上讨论的是字符串的实际长度,而非对应字符数组...
  • //将字符串中某个字符串更改为另外一个字符串 // "abcdef"将"bc"->"de" public class strChange { //方法1、自带函数解决 public String ...
  • 目录 预备的基础知识  将C-风格字符串作为参数的函数 C-风格字符串与常规char数组之间的区别  统计某个字符串含有字符个数的程序 ...C-风格字符串由一系列字符组成,以空值...表示字符串的方式有三种: cha...
  • SQL SERVER拼接字符串字符串中有变量)对我来说是一个难点,总是忘记规律,写下来以帮助记忆。 ...一、拼接字符串(整个字符串不分割)步骤: ...字符串中的变量以'''+@para+'''在字符串中表示; 若在
  • 问题描述:有一个用字符指针表示字符串char *str = "0 12...一、首先了解一下字符串表示方式,即c语言怎样定义字符串 可以用数组来初始化: 例如:char buf[5] = {'a','b','c'}; 或者 char buf[5] = {"abc"...
  • C++ 字符串与字符数组 详解

    万次阅读 多人点赞 2018-03-03 19:28:22
    在C++,有两种类型的字符串表示形式: C-风格字符串 C++引入的string类 C-风格字符串 C 风格的字符串起源于 C 语言,并在 C++ 继续得到支持。字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。...
  • 题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。    这道题的基本思路就是在第一...
  • C语言版字符串查找函数,字符串中查找子串
  • Python字符串中删除特定字符的方法

    万次阅读 2020-02-25 09:59:36
    这篇文章主要介绍了Python字符串中删除特定字符的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 分析 在Python字符串是不可变...
  • 字符串字符数组实际上是一系列字符的集合,也就是字符串(String)。 字符串数组在C语言,没有专门的字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。C语言规定,可以将字符串直接赋值给字符...
  • sql语句,以逗号分隔的字符串中是否包含某个特定...mysql:mysql有一个方法 FIND_IN_SET(ele, str),str是一个以逗号分隔的字符串,ele是一个特定字符串,该方法表示判断str是否包含ele。 sqlserver:sqlserve
  • c++字符串与c字符串

    千次阅读 多人点赞 2019-05-27 19:32:26
    字符串字面量3.C++ std::string 类3.1 C风格字符串的优势和劣势3.2 使用string类3.2.1 std::string 字面量3.2.2 c++字符串的数值转换(1)字符串转数值(2)数值转字符串3.2.3 常用字符串函数3.2.4 原始字符串字面量 ...
  • s表示待处理的字符串,l表示当前非重复字符的个数 1、不许使用额外的存储空间 对每个待处理的字符,可以考虑在后处理和在前处理 在后处理:对每个待处理的字符,假设为c,从该字符的后一个字符开始,直到字符串的...
  • 字符串和字节字符串

    千次阅读 2017-05-21 15:21:17
    在Python,它们表示为:b'haha' # 字节字符串 'haha' # 字符串字符串是字符序列,它是一种抽象的概念,不能直接存储在硬盘;字节字符串是字节序列,它可以直接存储在硬盘。它们之间的映射被称为编码/解码。在...
  • 字符串中的变量以'''+@para+'''在字符串中表示; 若在执行时存在类型转换错误,则应用相应的类型转换函数,对变量进行类型转换(如cast()函数)。 要注意的是字符串中的变量以三个引号引起来。 ...
  • #include <iostream> #include<bits/stdc++.h> using namespace std;...//定义一个void函数,有三个参数,分别是s1,s2,ch,要在s1里面... //定义两个字符指针,分别指向两个字符串; ch...
  • python对字符串中指定字符进行替换

    千次阅读 2020-02-17 21:37:25
    表示字符串string所有字符为’a’的替换为’b’。 例子 string = "abcabcabc" string = string.replace('a','b') print(string) 输出 bbcbbcbbc (2)替换指定位置i的字符为字符s:列表化字符串再以字符...
  • Java数字转换为字符串字符串转换为字符

    万次阅读 多人点赞 2017-11-20 10:20:41
    java数字和字符串相互转化

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,012,518
精华内容 805,007
关键字:

怎么表示字符串中的字符