zoukankan      html  css  js  c++  java
  • Java基础之字符串

    字符串

    字符串的特点:

    • 字符串的内容用不可变

    • 正是因为字符串不可改变,所以字符串是可以共享使用的

    • 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组

    创建字符串的3+1种方法

    1. public String() 创建一个空白字符串,不含有任何内容

    2. public String(char[] array) 根据字符数组的内容,来创建对应的字符串

    3. public String(byte[] array) 根据字节数组的内容,来创建字符串

    package com.dcits.day07.demo01;
    ​
    public class Demo01String {
        public static void main(String[] args) {
            // 使用空参构造
            String str1 = new String();
            System.out.println(str1);
            // 根据字符数组创建
            char[] charArray = {'a','b','c'};
            String str2 = new String(charArray);
            System.out.println("第二个字符串" + str2);
            // 根据字节数组串讲
            byte[] byteArray = {97,98,99};
            String str3 = new String(byteArray);
            System.out.println(str3);
            // 直接创建
            String str4 = "hello";
            System.out.println(str4);
        }
    }

    字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中

    对于基本类型来说,==是进行数值的比较

    对于引用来说,==是进行地址的比较

    字符串中的方法:

    1.equals

    package com.dcits.day07.demo02;
    ​
    public class Demo01Equals {
        public static void main(String[] args) {
            String str1 = "hello";
            String str2 = "hello";
            char[] array = {'h','e','l','l','o'};
            String str3 = new String(array);
    ​
            System.out.println(str1.equals(str2));
            System.out.println(str2.equals(str3));
            System.out.println(str3.equals("hello"));
            System.out.println("hello".equals(str1));
        }
    }

    2.public int length() 获取字符串中含有的字符个数,拿到字符串的长度

    3.public String concat(String str) 将当前字符串和参数字符串拼接成为返回值新得字符串

    4.public char charAt(int index) 获取索引位置的单个字符。(索引从0开始)

    5.public int indexof(string str) 查找参数字符串在本地字符串当中首次出现的索引位置,如果没有返回-1值

    package com.dcits.day07.demo02;
    ​
    public class Demo02StringGet {
        public static void main(String[] args) {
            // 获取字符串的长度
            int length = "zczxcasadsadadsad".length();
            System.out.println("字符串的长度:" + length);
    ​
            // 拼接字符串
            String str1 = "hello";
            String str2 = "world";
            String str3 = str1.concat(str2);
            System.out.println(str1);
            System.out.println(str2);
            System.out.println(str3);
            
            // 获取指定索引位置的单个字符
            char ch = "Hello".charAt(1);
            System.out.println("在1号索引位置的字符是:" + ch);
    ​
    ​
            // 查找参数字符串在本来字符串当中出现的第一次索引位置
            // 如果根本没有,就返回 -1 值
            String original = "HelloWorld";
            int index = original.indexOf("llo");
            System.out.println("第一次的索引值是:" + index);
    ​
            System.out.println("HelloWOrld".indexOf("abc"));
        }
    }

    6.public String substring(int index) 截取从参数位置一直到字符串末尾,返回新字符串

    public String substring(int begin,int end) 截取从begin开始,一直到end结束,中间的字符串

    注意: [begin,end) 包含左边,不包含右边

    package com.dcits.day07.demo02;
    ​
    public class Demo03Substring {
        public static void main(String[] args) {
            String str1 = "HelloWorld";
            String str2 = str1.substring(5);
            System.out.println(str1);
            System.out.println(str2);
            
            String str3 = str1.substring(4,7);
            System.out.println(str3);
            
            String strA = "Hello";
            System.out.println(strA);
            strA = "Java";
            System.out.println(strA);
            
        }
    }

    7.public char[] toCharArray() 将当前字符串拆分为字符数组作为返回值

    public byte[] getBytes() 获得当前字符串底层的字节数组

    public String replace(CharSequence oldString,CharSequence newString) 将所有出现的老字符串替换成为新的字符串 ,返回替换之后的结果新字符串

    注意:CharSequence意思就是说可以接受字符串类型

    package com.dcits.day07.demo02;
    ​
    public class Demo04Convert {
        public static void main(String[] args) {
            // 转换成为字符数组
            char[] chars = "Hello".toCharArray();
            System.out.println(chars[0]);
            System.out.println(chars.length);
    ​
            // 转换成为字节数组
            byte[] bytes = "abc".getBytes();
            for (int i = 0; i < bytes.length; i++) {
                System.out.println(bytes[i]);
            }
    ​
            // 字符串的内容替换
            String str1 = "How do you do?";
            String str2 = str1.replace("o","*");
            System.out.println(str1);
            System.out.println(str2);
    ​
            String lang1 = "会不会玩呀,你大爷的!";
            String lang2 = lang1.replace("你大爷的","****");
            System.out.println(lang2);
        }
    }

    8.public String[] split(String regex) 按照参数的规则,将字符串切分成为若干部分

    注意:split方法的参数其实是一个“正则表达式”,如果按照英文句点进行切割,需要写成 \.

    package com.dcits.day07.demo02;
    ​
    public class Demo05Split {
        public static void main(String[] args) {
            String str1 = "aa,bbb,ccc,ddd";
            String[] array1 = str1.split(",");
            for (int i = 0; i < array1.length; i++) {
                System.out.println(array1[i]);
            }
    ​
            String str3 = "XXX.YYY.ZZZ";
            String[] array3 = str3.split("\.");
            for (int i = 0; i < array3.length; i++) {
                System.out.println(array3[i]);
            }
    ​
        }
    }

    静态static关键字

    一旦使用了static关键字,那么这样的内容不再属于对象自己,而是属于类的,所以凡是本类的对象,都共享一份

    一旦使用了static修饰成员方法,那么这就成为了静态方法,静态方法并不属于对象,而是属于类的。对于静态方法来说可以进行对象名来调用,也可以直接通过类名称调用

    无论是成员变量还是成员方法,如果有了static,都推荐使用类名称进行调用。

    • 静态变量:类名称.静态变量

    • 静态方法:类名称.静态方法

    注意:

    1. 静态不能直接访问非静态

    2. 静态方法中不能使用this

    //
    package com.dcits.day07.demo03;
    ​
    public class myClass {
        int age;
        static String name;
        public void method() {
            System.out.println("这是一个普通的成员方法");
            // 成员方法可以访问静态变量
            System.out.println(age);
            System.out.println(name);
        }
        public static void methodStatic() {
            System.out.println("这是一个静态方法");
            System.out.println(name);
            // 静态方法不能访问成员变量
            System.out.println(age);
        }
    }
    // 调用
    package com.dcits.day07.demo03;
    ​
    public class Demo02StaticMethod {
        public static void main(String[] args) {
            myClass obj = new myClass();
            obj.method();
    ​
            // 对于静态方法来说可以进行对象名来调用,也可以直接通过类名称调用
            myClass.methodStatic();
            // 不推荐
            obj.methodStatic();
            // 对于本类中的静态方法,可以省略类名称
            myMethod();
        }
        public static void myMethod() {
            System.out.println("自己的方法");
        }
    ​
    }
    ​

    静态内存图:

    静态代码块

    特点:当第一次用到本类时,静态代码块执行唯一的一次,静态代码块比构造方法先执行

    // Person类
    package com.dcits.day07.demo03;
    ​
    public class Person {
        // 静态代码块的内容
        static {
            System.out.println("静态代码块执行!!");
        }
        public Person () {
            System.out.println("构造方法执行啦!");
        }
    }
    // 调用
    package com.dcits.day07.demo03;
    ​
    public class Demo04Static {
        public static void main(String[] args) {
            Person one = new Person();
            Person two = new Person();
        }
    }
    // 静态代码块执行!!
    // 构造方法执行啦!
    // 构造方法执行啦!

    数组工具类Arrays

    注意:

    • 排序时,如果是数值,sort默认按照从小到大,

    • 如果是字符串,sort默认按照字母升序

    • 如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持

    package com.dcits.day07.demo04;
    ​
    import java.util.Arrays;
    ​
    public class Demo01Arrays {
        public static void main(String[] args) {
            // Arrays中的默认格式转换成为字符串
            int[] Array = {10,20,30};
            String intStr = Arrays.toString(Array);
            System.out.println(intStr);
            
            // Arrays中的排序方法
            int[] array1 = {2,6,1,3,5};
            Arrays.sort(array1);
            System.out.println(Arrays.toString(array1));
    ​
            String[] array2 = {"bbb","aaa","ccc"};
            Arrays.sort(array2);
            System.out.println(Arrays.toString(array2));
        }
    }

    数学工具类

    package com.dcits.day07.demo04;
    ​
    public class Demo03Math  {
        public static void main(String[] args) {
            // 获取绝对值
            System.out.println(Math.abs(-2.1));
    ​
            // 向上取整
            System.out.println(Math.ceil(3.1));
    ​
            // 向下取整
            System.out.println(Math.floor(3.9));
    ​
            // 四舍五入
            System.out.println(Math.round(20.5));
            System.out.println(Math.round(3.33));
    ​
            // Π
            System.out.println(Math.PI);
    ​
    ​
        }
    }
  • 相关阅读:
    EMF介绍系列(一、EMF与MDA)
    EMF介绍系列(四、枚举类型、自定义类型和Map)
    使用osgi.util.NLS简化资源文件访问
    2012 定制化产品探讨(周金根).pdf
    敏捷个人理念与模型PPT及今年唯一一次的公开线上课堂
    生活:父与子三亚行
    与北邮学子交流成长,敏捷个人总体介绍 PPT
    敏捷个人教你如何制作2012生活看板
    敏捷个人架构图 V1.3
    敏捷个人微刊封面及敏捷个人使命和加入社区方式
  • 原文地址:https://www.cnblogs.com/guoruijie/p/13295055.html
Copyright © 2011-2022 走看看