请先查看前置知识:

【JAVA】基础1-字符串、堆、栈、静态与引用类型

https://www.cnblogs.com/remyuu/p/15990274.html


import java.util.Scanner;
//notepad++ 的快速注释 ctrl + k 取消时ctrl + q
/*
代码学习知识点清单
1-Scanner的使用
2-String的两种创建方法
3-使用Scanner规则搜索关键字
4-字符串-获取长度
5-字符串-获取特定关键字索引
6-字符串-根据索引获取关键字
7-字符串-截取
8-字符串-查询关键字
9-字符串-构造方法与直接赋值的原理
10-字符串-比较字符串大小
11-字符串-判断是否为空字符串
12-字符串-分割文本!
13-字符串-大小写,空格处理
*/
public class Learn01{
    public static void main(String[] args){
        System.out.println("-------------------------------");
        System.out.println("------------Learn01-----------");
        System.out.println("-------------------------------");
        // Scanner s = new Scanner(System.in);
        // int num1 = s.nextInt();
        // System.out.println("请用户再输入一个");
        // int num2 = s.nextInt();
        // System.out.println("sum="+(num1+num2));
        //s.close();//将构造方法关闭
        // //也可以用nextFloat,nextDouble

//字符串变量创建两种方法
        String str1 = "我是一个string1";//一般方法
        String str2 = new String("我是第二个"); //构造方法
        System.out.println(str1 + str2);

//String使用Scanner方法进行过滤
        String input = "1 fish 2 fish red fish blue fish";
        Scanner ss = new Scanner(input).useDelimiter("\\s*fish\\s*");
        //Scanner方法给对象构造方法(new)的时候,方法需要传入数据源,
        //即Scanner( ... ),可以再添加筛选器,分割文本!
        //筛选的格式 \\s*...\\s*
        System.out.println(ss.nextInt());
        System.out.println(ss.nextInt());
        System.out.println(ss.next());
        System.out.println(ss.next());
        ss.close();

//练习使用Scanner筛选器分割文本
        String TestScannerString = "1 2 3 4 3 1 2 3 3 4 3 2";
        Scanner MyScanner = new Scanner(TestScannerString).useDelimiter("\\s* \\s*");
        for    (int i=0;i<2;i++)
            System.out.println(i + ":" +MyScanner.next());

/*关于字符串的知识点
        字符串不能够被修改,string与其他基本类型不同(比如int等),
        string在变量区储存的是字符串在常量区的地址,重新赋值的话
        只会改变其的指向的内存地址*/

//字符串的操作 "1 2 3 4 3 1 2 3 3 4 3 2"
        ///1,length(),取得字符串的长度
        System.out.println("上面字符串长度"+TestScannerString.length());
        System.out.println("-------------------------------");

///2-indexOf(..)根据字符查找位置
        //2-1indexOf(String str),查找字符串子串从前往后 注:索引从0开始哦
        System.out.println(TestScannerString.indexOf("4"));//输出6
        //2-2,lastIndexOf(String str),从后往前查找子串
        System.out.println(TestScannerString.lastIndexOf("4"));//输出18
        //如果查找不到 返回-1
        //2-3,indexOf(int i),还可以传入ASCII/字符
        System.out.println(TestScannerString.lastIndexOf(49));//49是1 输出10
        //2-4,lastIndexOf(int i)同理,不赘述。
        System.out.println("-------------------------------");

///3-charAt(int index)根据位置获取字符
        System.out.println(TestScannerString.charAt(0));
        //索引不能超出范围,最大索引是长度-1
        System.out.println("-------------------------------");

///4-substring(...)截取字串
        //4-1,substring(int beginIndex),从指定位置(包括)往后截取
        System.out.println(TestScannerString.substring(3));
        //4-2,substring(int beginIndex,int endIndex),从指定位置(包括)截取到指定位置(不包括)
        System.out.println(TestScannerString.substring(3,6));//强调,不包括结束索引
        System.out.println("-------------------------------");

String strTest = new String("www.pornhub.com");//方法构造,会new在堆中,再引用字符常量
        String strTestDirect = "www.pornhub.com";//在栈中直接引用字符常量的地址,没有中间商
        ///5-判断字符串
        //5-1,startsWith(String str)判断字符串是否以...开头
        System.out.println(strTest.startsWith("www."));            //输出true
        //5-2,endsWith(String str)判断字符串是否以...结尾
        System.out.println(strTest.endsWith("www."));            //输出false
        //5-3,equals(String str)判断字符串是否相等
        System.out.println(strTest.equals("www.pornhub.com"));    //输出true
        //5-4, ==  比较字符串的引用地址
        System.out.println(strTest == "www.pornhub.com");        //输出false
        System.out.println(strTestDirect == "www.pornhub.com"); //输出true
                    /*字符串构造方法的本质   !!重点!!
            构造方法和直接赋值在内存的存储方式不一样
            内存有四个区:栈 堆 方法区 运行常量区
            
            //字符串("www.pornhub.com")会存储在方法区的运行常量区
            //以下直接赋值的方式现在栈中创建str1变量,存储一个地址,指向常量区
            //str1和str2都是指向同一个地址
            String str1 = "www.pornhub.com";
            String str2 = "www.pornhub.com";
            String tr3 = new String("www.pornhub.com");
            //但是需要注意的是,通过new出来的对象是存储在堆里面的,而不是常量区当中
            //换而言之,方法中的"www.pornhub.com"会在运行常量区复制到堆中的那个新的对象中
            //总的来说,栈中的变量指向堆,堆中的对象再指向运行常量区,相当于中间商
            
            //另外一点,如果初始化对象赋值为null,则只能索引对象(栈),不能索引对象在堆中的引用。
            
            然后需要区别 == 和 equals 
            ==是比较引用 equal比较的是字符不管你怎么引用
            */
        //5-5,equalsIgnoreCase(String str),忽略大小写地判断字符串是否相等
        System.out.println(strTest.equalsIgnoreCase("wWw.PoRnHuB.CoM"));//输出true
        //5-6,compareTo(String str),比较字符串大小
        //挨个字符比较,遇到不同的字符就返回ascii差值,
        //若前面字符相等长度不等则返回长度差 ascii的计算:主体-客体
        //作用:一般用于字母的排序中
        System.out.println(strTest.compareTo("www.pornhub.com"));//输出0
        System.out.println(strTest.compareTo("www.pornhub"));     //输出4
        System.out.println(strTest.compareTo("xww.pornhub.com"));//输出-1
        //5-7,contains(String str),判断是否包含字串...,不管有多少个
        System.out.println(strTest.contains("www."));             //输出true
        //5-8,isEmpty(),判断是否为空字符串
        System.out.println(strTest.isEmpty());                     //输出false
        String testStringEmpty = "";
        System.out.println(testStringEmpty.isEmpty());             //输出true
        testStringEmpty = " ";
        System.out.println(testStringEmpty.isEmpty());             //输出false
        //如果是赋值null,是不可以操作的。
        System.out.println("-------------------------------");

///6-字符串转换操作
        //6-1,toLowerCase(),转小写
        System.out.println(strTest.toLowerCase());
        //6-2,toUpperCase(),转大写
        System.out.println(strTest.toUpperCase());
        //6-3,split(...),字符串分割,用字符串数组来接收
        //6-3-1,split(String str)
        String[] strs = strTest.split("\\.");//非常特殊!!!
        System.out.println(strs);                                //输出了地址
        for(String temps : strs)
            System.out.println(temps);
        //6-3-2,split(String str,int limit)

//6-4,trim(),剔除前后的空格,中间不剔除
        strTest = "   www.pornhub.com ";
        System.out.println(strTest = strTest.trim());            //输出了www.pornhub.com
        //6-5,replace(,),可以替换字符或文本(只能字符替换字符,文本替换文本,包括空字符)
        System.out.println(strTest = strTest.replace("www","i love"));//输出了i love.pornhub.com
        System.out.println(strTest = strTest.replace('i','u'));        //输出了u love.pornhub.com
    }
}

【java】学习路线2-构造、Scanner包导入、字符串操作、数组、引用类型的更多相关文章

  1. 最新java学习路线:含阶段性java视频教程完整版

    最新java学习路线:带阶段性java视频教程版本 第一阶段:Java基础 学习目标: 掌握基本语法.面向对象.常用类.正则.集合.Io流.多线程.Nio.网络编程.JDK新特性.函数式编程 知识点细 ...

  2. 一份最中肯的Java学习路线+资源分享(拒绝傻逼式分享)

    这是一篇针对Java初学者,或者说在Java学习路线上出了一些问题(不知道该学什么.不知道整体的学习路线是什么样的) 第一步:Java基础(一个月左右) 推荐视频: 下面的是黑马内部视频,我比较推荐的 ...

  3. 【Todo】Java学习路线(方向指导)

    在网上搜了下Java学习路线(关键词:学习,因为众所周知,实践出牛人,在平时工作不怎么深入的情况下,才强调学习的方向的重要性 ^_^) 发现下面知乎这个回答写的真好.mark如下: https://w ...

  4. 【强烈推荐】可能是最适合你的 Java 学习路线和方法

    如遇链接无法打开,建议使用 https://github.com/Snailclimb/JavaGuide/blob/master/docs/questions/java-learning-path- ...

  5. Java学习路线【转】

    Java学习路线[转] 第一阶段:JavaSE(Java基础部分) Java开发前奏 计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置,程序的执行过程,相 ...

  6. 分享篇——我的Java学习路线

    虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...

  7. java学习路线(好资源大家分享)

    对于入门java将近两年的时间,曾经迷惘过,一直想知道java的具体学习路线,看过了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,发现没有一个符合我个人需求的学习路线,根 ...

  8. java学习路线推荐,希望能帮到你

    很多小白刚开始学习java时,肯定迷惘过,因为对java基本是啥也不懂的,一直想知道java的具体学习路线,我曾经也看了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,特别 ...

  9. Java学习路线|转至CodeSheep

    Java学习路线 基础知识 . 基本语法 基本网络知识:tcp/ip http/https 工具方面 . 操作系统:linux (CentOS\Ubuntu\Fe..) 代码管理:svn/git 持续 ...

  10. 从入门到精通,Java学习路线导航

    引言最近也有很多人来向我"请教",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧. Ja ...

随机推荐

  1. 从零开始实现lmax-Disruptor队列(三)多线程消费者WorkerPool原理解析

    MyDisruptor V3版本介绍 在v2版本的MyDisruptor实现多消费者.消费者组间依赖功能后.按照计划,v3版本的MyDisruptor需要支持多线程消费者的功能. 由于该文属于系列博客 ...

  2. JavaScript与Node.js一起打造一款聊天App

    聊天是我们人与人交流最直接的方式,互联网的加入使我们交流更加便捷.我们手机上的微信.QQ是我们手机必不可少的应用软件.那么,我们是否可以做一款聊天应用呢? 之前我自己闲着没事,研究过一些技术,做了一款 ...

  3. Android multiple back stacks导航的几种实现

    Android multiple back stacks导航 谈谈android中多栈导航的几种实现. 什么是multiple stacks 当用户在app里切换页面时, 会需要向后回退到上一个页面, ...

  4. jenkins结合ansible发布

    1. yum安装的jenkins修改配置文件调用ansible vim /etc/sysconfig/jenkins 2. 安装Jenkins Ansible插件 Manage Jenkins---& ...

  5. 隐私计算FATE-多分类神经网络算法测试

    一.说明 本文分享基于 Fate 使用 横向联邦 神经网络算法 对 多分类 的数据进行 模型训练,并使用该模型对数据进行 多分类预测. 二分类算法:是指待预测的 label 标签的取值只有两种:直白来 ...

  6. Go死锁——当Channel遇上Mutex时

    背景 用metux lock for循环,在for循环中又 向带缓冲的Channel 写数据时,千万要小心死锁! 最近,我在测试ws长链接网关,平均一个星期会遇到一次服务假死问题,因为并不是所有rou ...

  7. Tomcat日志乱码解决方法

    将配置文件logging.properties所有含有UTF-8的删除

  8. API管理之利剑 -- Eolink

    随着信息化飞速增长的还有各信息系统中的应用接口( API ),API 作为信息系统内部及不同信息系统之间进行数据传输的渠道,其数量随着软件系统的不断庞大而呈指数型增长,如何管理这些 API 已经在业界 ...

  9. 绿色安装MySQL5.7版本----配置my.ini文件注意事项

    前言 由于前段时间电脑重装,虽然很多软件不在C盘,但是由于很多注册表以及关联文件被删除,很多软件还需要重新配置甚至卸载重装. 使用MySQL时就遇到了这种情况,在修改配置文件无效的情况下选择了重新安装 ...

  10. day06 Java_数组_方法_参数

    精华笔记: 数组: 复制: System.arraycopy(a,1,b,0,4); int[ ] b = Arrays.copyOf(a,6); 排序: Arrays.sort(arr); //升序 ...