String字符串的处理

  • 对String字符串的处理分成4类

  1. 字符串长度的处理
  2. 两个字符串之间的关系
  3. 字符串的解析
  4. 字符串的转换



1. 字符串长度的处理

  • 判断一个字符串是否为空

① ==null 存不存在
② "".equals(String) 有没有内容

例如:

        //已经分配内存,但是没有存数据
        String s2="";
        //没有分配内存
        String s3=null;
        //已经分配内存,并且存了数据“hello"
        String s4="hello";

演示图:

  • String.length() 长度处理:获取当前字符串的长度
    public static void main(String[] args) {
    String string="2018年07月17日 '22时55分'";
    //定义一个String类型的字符串变量,数据中有数字、汉字、空格、符号
    //只要占了一个字符位置,都算在length()方法中
    
    int length=string.length();
    //获取长度,存到length变量中
    
    System.out.println(length);
    //打印长度
    }

演示图:


2. 两个字符串之间的关系

① 两个字符串之间的相加、拼接:+


    public static void main(String[] args) {
    String str1="好好学习,";
    String str2="天天向上!";
    String str3=str1+str2;
    String str4=str3+"说的就是我!";
    
    System.out.println("变量之间进行拼接:"+str3);
    // 变量之间进行拼接
    
    System.out.println("变量和字符串进行拼接:"+str4);
    //
    }

演示图:


② 判断两个字符串是否相等
  • equals(); :是否相等,大小写敏感,返回值boolean类型


    public static void main(String[] args) {
        String str1 = "helloWord";
        String str2 = "HelloWord";
        boolean result1 = str1.equals(str2);
        // 判断str1和str2是否相等,因为大小写不一样,不符合条件,返回false

        boolean result2 = !str1.equals(str2);
        // 判断str1和str2是否不相等,因为判断结果不相等,符合条件,返回true

        boolean result3 = str2.equals("HelloWord");
        // 判断str2和HelloWord是否相等,因为它们一模一样,符合条件,返回true

        System.out.println("str1是否和str2相等:" + result1 + "\r\nstr1和str2是否不相等:"
                + result2 + "\r\nstr2是否和HelloWord相等:" + result3);
    }

演示图:


  • equalsIgnoreCase(); :是否相等,大小写不敏感,返回boolean类型


    public static void main(String[] args) {
        String str1 = "helloWord";
        String str2 = "HelloWord";
        boolean result1 = str1.equalsIgnoreCase(str2);
        //判断是否相等,忽略大小写
        
        boolean result2=str2.equalsIgnoreCase("Hello");
        //判断str2是否等于Hello

        System.out.println("str1是否和str2相等:" + result1 + "\r\nstr2和Hello是否相等:"
                + result2 );
    }

演示图:


③ contains(); :包含
  • 字符串1 是否包含 字符串 2,返回boolean类型

    public static void main(String[] args) {
        String str1 = "好好学习,";
        String str2 = "学习";

        boolean result1 = str1.contains(str2);
        // 判断str1是否包含str2

        boolean result2 = str1.contains("NO");
        // 判断str1是否包含"NO"

        boolean result3 = str1.contentEquals("好好学习,");
        // 判断内容是否相等

        System.out.println("result1=" + result1 + "\r\nresult2=" + result2
                + "\r\nresult3=" + result3);
    }

演示图:

④ String2在String1中的位置

  • indexOf(); :第一次出现的位置

  • lastIndexOf(); :最后一次出现的位置


    public static void main(String[] args) {
        String str1 = "好好学习啦学习试试";
        String str2 = "学习";

        int result1 = str1.indexOf(str2);
        //// str2在str1中第一次出现的位置,编程语言中位子是以0开始的
        
        int result2 = str1.lastIndexOf(str2);
        // str2在str1中最后一次出现的位置,编程语言中位子是以0开始的

        System.out.println("str2在str1出现的位子是:" + result1
                + "\r\nstr2在str1最后出现的位子是: " + result2);
    }

演示图:



3. 字符串解析

  • split(分隔符);

拆分字符串(ArrayList中:单值):把 一段字符串按照一定的规律进行拆分,结果存到容器

public void strSplit(){
        //分隔符固定,内容长度不固定
        String str="好好学习|天天上上 太阳当空照|花儿对我笑";
        //把多个值同时用一个变量存起来,就得用到容器:单值(数组、arraylist、hashset),键值对(hashmap)
        String[] result=str.split("|");
        //变量容器内的所有内容,用for each
        for(String s:result){
            //遍历,打印出分割后的所有数据
            System.out.println(s);

        String param="ct=17&pn=0&tn=ikaslist&rn=10&fr=wwwt&word=简历%20英文";
        //先获得一串URL的请求正文
        
        String[] params=param.split("&");
        //按照&符号进行分割,获得多个键值对,存到容器中
        
        for(String s:params){
            String[] entry=s.split("=");
        //遍历出分割的字符串,进行二次分割,并把值存到一个变量中
            String key=entry[0];
            String value=entry[1];
        }
        }

分割、二次分割、值存HashMap数组、foreach遍历、iterator遍历

package com.guoyasoft.topic.string;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class TestJianShu {
    public static void main(String[] args) {
        // 前端界面传的金额、年龄等为字符串,后端要进行数字计算,必须转成对应类型的数字
        HashMap<String, String> ha = new HashMap<String, String>();
        String param = "ct=17&pn=0&tn=ikaslist&rn=10&fr=wwwt&word=简历%20英文";

        String[] params = param.split("&");
        // 按照&符号进行分割,获得多个键值对,存到容器中

        for (String s : params) {
            // 遍历出所有分割后的字符串
            String[] entry = s.split("=");

            // 二次分割,获得键值对,然后把分割后的数据存到HashMap数组中
            ha.put(entry[0], entry[1]);
        }
        System.out.println(ha.get("tn"));
        // 取存到HashMap中的数据,按key进行取值

        Set<Entry<String, String>> mapha = ha.entrySet();
        // 调用Map.entrySet()方法,把所有<K,V>键值对的集合,一对对的放入到一个set的数组集合中,
        // Set泛型:Entry<String, String>,由创建HashMap数组时定义的泛型类型

        Iterator<Entry<String, String>> itmap = mapha.iterator();
        // iterator迭代器模式:为遍历不同的容器结构提供一个统一的接口(多态迭代)
        // Iterator模式:使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。
        // 简单理解就是,数组调用iterator()方法,数组自身进行排序,可以使用.hasNext()和.next访问所有数组中数据

        // Iterator和foreach的区别:多态差别,因为foreach底层就是Iterator
        // Iterator是一个接口类型,他不关心集合或者数组的类型;
        // for和foreach都需要先知道集合的类型,甚至是集合内元素的类型;

        while (itmap.hasNext()) {
            // 调用Iterator接口类,它并不关系遍历的是什么类型的数组,直接.next()拿值
            // 这里把拿到的值重新存到一个对应类型的变量中,其实可以直接itmap.next().getKey();取值
            Map.Entry<String, String> item = itmap.next();
            String key = item.getKey();
            String value = item.getValue();
        }

        for (Entry<String, String> entry : mapha) {
            // 在做foreach遍历,必须先知道遍历的数组类型
            String key = entry.getKey();
            String value = entry.getValue();
        }

    }
}

  • substring();
    截取字符串:从什么位置到什么位置(N位置到M位置之间,或者N位置到结束)

    public static void main(String[] args) {
        String s1 = "好好学习,天天向上,确认过眼神,遇上对的人";

        // 截取2位置开始,到结束
        String s2 = s1.substring(2);
        System.out.println("截取s1的第2个位置到末尾的字符串:" + s2);

        // 截取2位置开始,到6位置之前
        String s3 = s1.substring(2, 6);
        System.out.println("截取s1的第2位到第6位的字符串:" + s3);

        // 截取:substring可以和indexOf结合使用

        int index = s1.indexOf(",");
        // 确定开始到第一个","的字符串个数
        
        System.out.println(index);
        String s4 = s1.substring(0, index);
        //截取开始到index的字符串
        
        System.out.println(s4);
        s4 = s1.substring(index + 1);
        //截取","位置+1到结束的字符串
        
        System.out.println(s4);‘’

    }


4. 字符串转换

① 字符串与数字相互转换
  • 数字转换成字符串:使用+拼接
    public static void main(String[] args) {
        int a = 128;
        String b = a + "";
        //int类型的变量a与""拼接,a的类型就改为了String类型
        System.out.println(b);
    }
  • 字符串转数字
    Integer.parseInt(字符串);
    Long.parseLong(字符串);
    Double.parseDouble(字符串)
    public static void main(String[] args) {
        String a = "128";
        int b;
        //定义String变量a,并初始化。;定义一个int变量b。
        
        b = Integer.parseInt(a);
        //把日期转换成int类型的数据存到变量b中
        System.out.println(b);
    }

② 字符串与日期相互转换

  • 日期转字符串
  1. 创建时间展现格式:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2. 获取时间
  3. sdf.format(时间格式的变量);

    public static void main(String[] args) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 定义时间展现格式

        Calendar c = Calendar.getInstance();
        // 获取当前时区日历
        c.add(Calendar.DAY_OF_WEEK, 1);
        String strDate = sdf.format(c.getTime());
        // sdf格式下使用format方法,把获取的日期改成字符串类型格式
        System.out.println(strDate);

        c.add(Calendar.DAY_OF_MONTH, 1);
        //对获取的日期进行修改,当前日期加一天
        
        c.add(Calendar.DAY_OF_WEEK, 1);
         //对获取的日期进行修改,按星期增加
        
    }

  • 字符串转日期
  1. 先要有个String类型的时间字符串
  2. 确定时间格式: SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  3. 用SimpleDateFormat 下的parse()方法进行转换时间类型格式
        String str="2018-04-23 21:41:23";
        SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //字符串转时间
        Date date=sf.parse(str);
        System.out.println(date);
        //时间转字符串
        //当前日期-计算机元年,单位:毫秒
        //计算机元年:(1970-01-01 00:00:00),类似民国35年,贞观14年,万历15年
        long time1=date.getTime();
        long time2=new Date().getTime();
        System.out.println(time2-time1);
  • 数字转换日期

    public static void main(String[] args) {
        long str = 603134410;
        // 当前日期-计算机元年,单位:毫秒

        Date date = new Date(str);
        // date.setTime(str);第二次赋值方式
        System.out.println(date);
        // 把str转换成时间格式,打印看一下结果

        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        // 确定展现格式yyyy:年 MM:月 dd:日

        String StringDate = sf.format(date);
        // 时间转换字符串

        System.out.println(StringDate);
    }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • 抬头看见,枝头荻花已不知何时飘散,满树的红霞已换成绿翠。指尖轻触空气中淡薄气息,以息奏乐,无法诉说的心事如高山流水...
    云之端阅读 214评论 0 0
  • 互联网经济炙手可热,共享单车应运而生。就想说说我接触这一行业所看到的世界。 我看到脚印。 我无法定义什么是天赋...
    sunliom1阅读 291评论 0 0
  • 人生,就是一步一步走,一点一点扔,所有的事物,都要有一个过程;所有的经历,都是一种懂得;所有的过往,都是岁月的一种...
    快乐天成阅读 588评论 1 3
  • 《经营十二条》之九 学习分享: 有勇气有担当,不管是经营企业还是经营人! 做人做事,对事物进行判断时都需要勇气!而...
    利他心阅读 110评论 0 0