String类型和包装数据类型 (六)

一、String

1.常量池

在这里插入图片描述
注:
1.直接赋值常量,会先在常量池寻找是否有该常量,如果有直接将常量池中的常量付给对象,如果没有的话java会帮你在常量池创建一个字符串对象。
2.new 对象时赋值 会在堆里创建对象
3。“str1 == str2” 字符串之间加 == 代表 判断二者的地址是否相等

public void test1() {
   // "abc"双引号括起来的字符串:常量字符串,他也是一个对象
   // 1.8之后常量池放到堆,在常量池里面找有没有这个"abc"对象,
   // 如果常量池里面没有这个字符串对象,java就帮你在常量池里面new一个"abc"字符串对象。
   // 如果常量池里面有这个字符串,就把这个字符串的地址赋给这个变量。
   String str1 = "abc";
   String str2 = new String("abc");
   String str3 = "abc";
   // ==比较的是变量指向的对象的地址值
   System.out.println(str1 == str2);// false
   System.out.println(str1 == str3);// true
   System.out.println(str2 == str3);// false
   
   // 比较字符串的内容是不是相等使用equals()
   // 表str1这个字符串和str2这个字符串的内容是不是相等
   System.out.println(str1.equals(str2));// true
   System.out.println(str1.equals(str3));// true
   System.out.println(str2.equals(str3));// true
}

2.Sting常用操作

在这里插入图片描述在这里插入图片描述在这里插入图片描述
练习
1.string转double

 @Test
    public void test1(){
        String str = "3.1415926";//当转化成double类型时  字符串中不能有非数字字符
        System.out.println(str+1);//str+1  变成了字符串的拼接
        double v = Double.parseDouble(str);
        System.out.println(v+1 );
    }

2.string转换数组

@Test
    public void test2(){
        String string = "java";
        System.out.println(string.charAt(4));
    }

3.获取:charAt、indexOf、lastIndexOf

@Test
    public void test3(){
        int[] array = {1,2,3,4};
        System.out.println(array.length);

        String string = "java AndroidA";
        System.out.println(string.length());//13

        char[] chars = string.toCharArray();
        System.out.println(string.charAt(5));//A
//      indexOf
        System.out.println(string.indexOf('n'));//6
        System.out.println(string.indexOf('A',7));//12   从第7个开始找A
        System.out.println(string.indexOf("And"));//5   找到的第一个的下标
        System.out.println(string.indexOf("oid",5));//9
//       lastindexOf
        System.out.println(string.lastIndexOf('A'));//12
        System.out.println(string.lastIndexOf('i',12));
        System.out.println(string.lastIndexOf("dA"));
        System.out.println(string.lastIndexOf("A",8));


    }

4.判断:equals、equalsIgnoreCase、contains、startsWith、endsWith、isEmpty

    @Test
    public void test4(){
        String string1 = "abc";
        String string2 = "Abc";
//      字符串相等
        System.out.println(string1.equals(string2));//flase
//      字符串相等忽略大小写
        System.out.println(string1.equalsIgnoreCase(string2));//true
//      字符串是否包含子串
        String str = "java AndroidA";
        System.out.println(str.contains("And"));//true
//      判断是否为字符串的前缀
        System.out.println(str.startsWith("java"));//true
//      判断是否为下标5的前缀
        System.out.println(str.startsWith("And",5));//toffset   偏移量   true
//      判断是否为字符串的后缀
        System.out.println(str.endsWith("iodA"));//flase
//      判断字符串是否为空
        System.out.println(str.isEmpty());//fasle
        String str1 = "";
        System.out.println(str1.isEmpty());//true

        char[] array = {'j', 'a', 'v', 'a', ' ', 'A', 'n', 'd'};
        char[] chars = str.toCharArray();
        String str2 = new String(array);
        System.out.println(str2);
//      replace  将全部的字符进行替换,但返回一个新的字符串类型,原来的字符串不进行修改
        String replace = str.replace('A', 'B');
        System.out.println(str);
        System.out.println(replace);
    }

5.切割

@Test
    //根据空格将字符串进行切割
    public void test5(){
        String string = "java AndroidA";
        String[] array = string.split(" ");
        for (String s : array) {
            System.out.println(s);
        }
    }

6.获取子串

   @Test
    public void test6(){

        //subtree 子树
        String string =  "java AndroidA";
        System.out.println(string.substring(5));//AndroidA
        System.out.println(string.substring(5, 11));//Androi
        System.out.println(string.substring(5, 13   ));
    }
    @Test

3.stringBuffer、stringBuilder

String、StringBuffer、StringBuilder
相同点:都是final类,都不能被继承。
不同点:
1、String长度是不可改变的,StringBuffer、StringBuilder长度是可变的。
2、StringBuffer是线程安全(需要加锁,效率低)、StringBuilder是线程不安全(没有加锁,效率高)。

String长度不可改变
str1 = str1 +str2 + str3 + str4 + str5
new 一个新的对象后再把值赋给str1
除了最后一个对象其他对象全都没有用,浪费了对象

如果对这段代码加锁,就可以实现每次只有一个用户能进入这段代码,当执行完了之后,释放这个锁,另一个用户才能进来。
if (money>1000) {
money = money - 1000;
}

常量字符串的拼接,编译器会做优化,使用String就可以:
String str = “Java” + “PHP” + “Python” + “C”;

@Test
    public void test7(){

        String string =  "       skahdkasjd       ";
        System.out.println(string);
        System.out.println(string.trim());

        String string1 = "abc";
        String string2 = "def";
        String string3 = "ghi";

        string1 = string1 + string2 + string3;
        System.out.println(string1);

        StringBuffer stringBuffer = new StringBuffer("abc");
        stringBuffer.append(string2);
        stringBuffer.append(string3).append(string1);
        System.out.println(stringBuffer);

        StringBuilder stringBuilder = new StringBuilder("abc");
        stringBuilder.append(string2);
        stringBuilder.append(string3);
        System.out.println(stringBuilder);


    }

二、包装数据类型

1.概念

Java是纯面向对象语言,int、double都是基本数据类型。
Byle类 byte类型的包装类
Short类 short类型的包装类
Integer类 int类型的包装类
Long类 long类型的包装类
Float类 float类型的包装类
Double类 double类型的包装类
Character类 char类型的包装类
Boolean类 boolean类型的包装类
String和Date本身就是类。所以也就不存在什么包装类的概念了。
除了基本数据类似之外的都是引用数据类型,用一个类来描述。
所有引用数据类型的默认值是null。

虽然基本数据类型和包装数据类型互相转换有装箱和拆箱的过程,但是我们平时使用的时候
就把包装数据类型当成基本数据类型来使用就可以。

包装数据类型最主要使用:包装数据类型和字符串之间的转换
1、把基本数据类型转换成字符串
(1) 基本数据类型+"" : String str = 12 + “”; // “12”
(2) 基本数据类型的包装类.toString()
String str1 = Integer.toString(3);
String str2 = Double.toString(3.14);
2、把字符串转换成基本数据类型(从网页的输入框中得到的都是字符串)
(1) Integer.parseInt(String str); // “23” “3.14”
Double.parseDouble(String str);
Boolean.parseBoolean(String str);
XXXX.parseXXXX(String str);
(2) new对象: Integer integer = new Integer(String str);
Integer interger = new Integer(“4”);
int i = integer.intValue();

练习:

    @Test
    public void test8(){
        Integer integer1 = 12;
        //装箱
        Integer integer2 = new Integer(12);
        //拆箱
        int i =integer1.intValue();

        System.out.println(i);
        integer1 = integer1 +12;
        System.out.println(integer1);

    }

练习题

1、实现trim方法
String trim(String str);
“java Android”
" java Android"
"java Android "
“”
" "

 @Test
    public void test(){
//        String string = "   java Android   ";
//        String string = "    java Android";
//       String string = "java Android   ";
      String string = "        ";
        String str = trim(string);
        System.out.println(str);

    }
    public String trim(String string) {

        if (string == null || string.equals("")){
            return "";
        }
        int end = string.length()-1;

        int start = 0;

        while ((start >= end) && (string.charAt(start) == ' ')){
            start++;

        }
        while ((start >= end) && (string.charAt(start) == ' ')){
            if (start >= end){
                return "";
            }
            end--;

        }

        String substring = string.substring(start, end + 1);
        return substring;
    }

2、实现把“I Love Java!”的字符全部转换为小写并输出到控制台。
toLowerCase() toUpperCase()
Case Sensitive大小写敏感

@Test
    public void test(){
        String string = "I Love Java!";
        System.out.println(lowerCase(string));
    }

    private String lowerCase(String string) {
        if (string == null){
            return "";
        }
        char[] toCharArray = string.toCharArray();
        for (int i = 0; i < toCharArray.length; i++) {
            if (toCharArray[i] >= 'A'&& toCharArray[i] <= 'Z'){
//                toCharArray[i] += 32;
                toCharArray[i] = (char) (toCharArray[i] + 32);
            }
        }
        String string2 =new String(toCharArray );
        return string2;
    }

3、使用String类中的split()函数,统计出“this is my homework! I must finish it!”中单词的个数。
(注意:单词之间用一个空格来分隔。)

    @Test
    public void test1(){
        String str = "this is my homework! I must finish it!";
        String[] split = str.split(" ");
        for (String s : split) {
            System.out.print(s);
            System.out.print(" ");
        }
        System.out.println();
        System.out.println(split.length);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值