Java基础之神奇String类(一)

目录

一、初识String类

二、String类常用方法

(1)字符串构造

1.构造方式

2.String源码保存方式

3.注意小贴士

(2)字符串比较

1.四种比较方式

2.实例演示

(3)字符串查找

1.indexOf()和lastIndexOf()

2.charAt(int index)

3.contains()

(4)字符串转化

1.其他类型转字符串对象 

2.大小写转化

3.字符串转数组

4.格式化字符串

(5)字符串替换

1.replaceAll()和replaceFirst()

(6)字符串拆分

1.split()

(7)字符串截取

1.String substring()

(8)字符串其他用法

1.trim()


一、初识String类

        在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种数据和操作方法分离开的方式不适合面向对象的思想,而字符串的应用十分广泛,因此Java语言中有专门的的String类。在开发和校招笔试中都是十分常见的。     


二、String类常用方法

(1)字符串构造

1.构造方式

a.使用字符串的常量直接赋值

b.通过字符串常量的构造方法

c.通过字符数组来产生对象

d.通过字符串的静态方法(调用valueOf方法)来产生对象

public class StringProduce {
    public static void main(String[] args) {
        //1.使用字符串的常量直接赋值
        String str="hello";
        //2.通过字符串常量的构造方法
        String str1=new String("HELLO");
        //3.通过字符数组来产生对象
        char []arr=new char[]{'h','e','l'};
        //4.通过字符串的静态方法(调用valueOf方法)来产生对象
        String str2=String.valueOf("hello");
        //字符串长度
        System.out.println(str.length());
        //字符串长度是否为0
        System.out.println(str.isEmpty());
    }
}

 2.String源码保存方式

        String是引用数据类型,因此String str只是保存了字符串对象的的地址。

        在所有高级语言中,字符串类型,本质都是字符数组,字符串就是由一个个的字符来组成。Java中使用String类型来包装字符数组,提供了非常多的内置方法,让字符串变得更加好用。

        观察其源码,发现String类是被final修饰,没有子类,限制了String类被扩展或者修改的可能性。这样,对于String类就不存在多态,保证所有使用jdk的用户,接触到的String类都是相同版本,使用方法也一样。

3.注意小贴士

a.空格也算字符串长度

public class StringProduce {
    public static void main(String[] args) {
        String str=" ";
        System.out.println(str.length());
    }
}

 b.问题若字符串的引用为null。编译出错,null值“.”操作成员方法,一律是空指针(空指针异常

public class StringProduce {
    public static void main(String[] args) {
        String str=null;
        System.out.println(str.isEmpty());//空指针异常
    }
}

  c." "括起来的都是字符串的字面量,都是字符串对象

public class StringProduce {
    public static void main(String[] args) {
        String str="hello";
        System.out.println("hello".equals(str));
    }
}


(2)字符串比较

1.四种比较方式

a.通过==比较(比较的是两个字符串的地址不看内容
b.通过
equals()方法来比较两个字符串对象的内容是否相等(大小写敏感,返回boolean)
c.通过
equalsIgnoreCase()比较两个字符串对象的内容是否相等(大小写不敏感,返回boolean)
d.通过
compareTo()方法来比较两个字符串对象的大小关系(方式一:首先按照两个字符字典序比较大小,如出现两个大小不一样的字符,返回字符差值;方式二:如果前k个字符相等,k是两个字符串长度最小值,返回长度差

2.实例演示

public class StringCompare {
    public static void main(String[] args) {
        String str1=new String("hello");
        String str2=new String("hello");
        String str3=new String("Hello");
        String str4=str1;
        String str5="hello123";
        //false 通过==比较(比较的是两个字符串的地址,不看内容)
        System.out.println(str1==str2);
        //true
        System.out.println(str1==str4);
        //ture 通过equals方法来比较两个字符对象的内容是否相等(大小写敏感)
        System.out.println(str1.equals(str2));
        //false
        System.out.println(str1.equals(str3));
        //true 通过equalsIgnoreCase方法来比较两个字符对象的内容是否相等(大小写不敏感)
        System.out.println(str1.equalsIgnoreCase(str3));
        //32
        //首先按照两个字符串字典序比较大小,如出现两个大小不一样的字符,返回字符差值 'h'-'H'=32
        System.out.println(str1.compareTo(str3));
        //如果前k个字符相等(k是两个字符串长度最小值),返回长度差 5-8=-3
        System.out.println(str1.compareTo(str5));
    }
}


(3)字符串查找

1.indexOf()和lastIndexOf()

第一二两个查找单个字符;第三四个查找字符串

int indexOf(int ch)返回ch第一次出现的位置,没有的返回-1
int indexOf(int ch,int fromIndex)从fromIndex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str)返回str第一次出现的位置,没有返回-1
int indexOf(String str,int fromIndex)从fromIndex位置开始找str第一次出现的位置,没有返回-1
int lastIndexOf(int ch)从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch,int fromIndex)从fromIndexOf位置开始找,从后往前找ch第一次出现的位置,没有返回-1
int lastIndexOf(String str)从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str,int fromIndex)从fromIndexOf位置开始找,从后往前找str第一次出现的位置,没有返回-1

实例演示

public class StringFind {
    public static void main(String[] args) {
        String str="hello world";
        //indexOf()四种用法
        //查找第一个出现'l'的位置
        System.out.println(str.indexOf('l'));
        System.out.println(str.indexOf("llo"));
        //从5索引开始查找第一个出现'l'的位置
        System.out.println(str.indexOf('l',5));
        System.out.println(str.indexOf("llo",5));//找不到返回-1
    }
}

public class StringFind {
    public static void main(String[] args) {
        String str="hello world";
        //lastIndexOf()四种用法
        //查找最后一个出现'l'的位置
        System.out.println(str.lastIndexOf('l'));
        System.out.println(str.lastIndexOf("llo"));
        //从5索引开始查找最后一个出现'l'的位置
        System.out.println(str.lastIndexOf('l',5));
        System.out.println(str.lastIndexOf("llo",5));//找不到返回-1
    }
}

 2.charAt(int index)

        在字符串中查找指定的字符。

实例演示

public class StringFind {
    public static void main(String[] args) {
        String str="hello world";
        //注意越界问题
        char c=str.charAt(4);
        System.out.println(c);
    }
}

3.contains()

        判断字符串中是否包含某个字符串,大小写敏感

实例演示

public class StringFind {
    public static void main(String[] args) {
        String str="hello world";
        System.out.println(str.contains("world"));
        System.out.println(str.contains("World"));
    }
}


(4)字符串转化

1.其他类型转字符串对象 

         valueOf() 转化成字符串,可以是任何数据类型、对象。

public class StringRevert {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String s1=String.valueOf(123);
        String s2=String.valueOf(12.34);
        String s3=String.valueOf(true);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }
}

2.大小写转化

        toUpperCase()大写转化; toLowerCase()小写转化

public class StringRevert {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str="hello";
        String str1=str.toUpperCase();
        System.out.println(str1);
        String str2=str1.toLowerCase();
        System.out.println(str2);
    }
}

3.字符串转数组

         char[]date=str.toCharArray();字符串转为字符数组

         byte[]date1=str.getBytes();字符串转为字节数组

         byte[]date2=str.getBytes("GBK");英文字符无差,但中文字符不一样

public class StringRevert {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str="你好";
        //转为字符数组
        char[]date=str.toCharArray();
        str.toUpperCase();
        System.out.println(Arrays.toString(date));
        //转为字节数组,文件传输和网络编程
       byte[]date1=str.getBytes();
       byte[]date2=str.getBytes("GBK");//英文字符无差,但中文字符不一样
       System.out.println(Arrays.toString(date1));
       System.out.println(Arrays.toString(date2));
    }
}

public class StringRevert {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str="hello";
        //转为字符数组
        char[]date=str.toCharArray();
        str.toUpperCase();
        System.out.println(Arrays.toString(date));
        //转为字节数组,文件传输和网络编程
       byte[]date1=str.getBytes();
       byte[]date2=str.getBytes("GBK");//英文字符无差,但中文字符不一样
       System.out.println(Arrays.toString(date1));
       System.out.println(Arrays.toString(date2));
    }
}

4.格式化字符串

        String.format(**)类似于c中printf,但支持正则表达式。格式化字符串

public class StringRevert {
    public static void main(String[] args) throws UnsupportedEncodingException {
       String str1=String.format("%d-%d-%d",2020,12,28);
        System.out.println(str1);
    }
}


(5)字符串替换

1.replaceAll()和replaceFirst()

String replaceAll(String regex,String replacement)替换所有

String replaceFirst(String regex,String replacement)替换首个

实例演示

public class StringReplace {
    public static void main(String[] args) {
        String str="hello";
        System.out.println(str.replaceAll("l","_"));
        System.out.println(str.replaceFirst("l","-"));
    }
}


(6)字符串拆分

1.split()

        String[] split(String regex) ;将字符串全部拆分,拆分后的字符串长度,已指定格式能拆出几个就是几个

        String[] split(String regex,int limit) ;将字符串已指定的格式,拆分为limit组

        遇到特殊字符(.)等等无法拆分时,需要用到转义字符\\.

public class StringSplit {
    public static void main(String[] args) {
        String str="192.34.293.98";
        System.out.println(Arrays.toString(str.split("\\.")));
        System.out.println(Arrays.toString(str.split("\\.",2)));//按指定字符串,拆分成几组
    }
}

错误 


(7)字符串截取

1.String substring()

String substring(int beginIndex);从指定开始到结尾

String substring(int beginIndex,int endIndex);从指定开始到指定结尾,左闭右开

public class StringSub {
    public static void main(String[] args) {
        String str="hello world nihao";
        System.out.println(str.substring(5,9));//左闭右开
        System.out.println(str.substring(5));
    }
}


(8)字符串其他用法

1.trim()

trim()把字符串左右两端空格去掉(制表符、换行符),中间保留

public class StringSub {
    public static void main(String[] args) {
        String str=" hello world ";
        System.out.println(str.trim());
    }
}

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊爱吃软糖吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值