API常用类-String类

String类

java.lang.String
JDK 1.0

public final class String extends Object implements Serializable,Comparable<String>,CharSequenec

概述:

  • 字符串是由多个字符组成的一串数据(字符序列)。
  • 字符串可以看成是字符数组。

通过查看API,我们可以知道:

  • String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例(对象)实现。
  • 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区(另一个类)支持可变的字符串。
  • String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。
  • Java 语言提供对字符串串联符号(”+”)以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。

常用的构造方法:

  • public String() :空构造
  • public String(byte[] bytes):把字节数组转成字符串
  • public String(byte[] bytes,int index,int length) :把从某索引开始的一定长度的字节数组转成字符串
  • public String(char[] value):把字符数组转成字符串
  • public String(char[] value,int index,int count):把字符数组的一部分转成字符串
  • public String(String original):把字符串常量值转成字符串

字符串方法:
public int length():返回此字符串的长度

//public String(byte[] bytes):把字节数组转成字符串
byte[] bys={97,98,99,100,101};
String s2=new String(bys);
system.out.println("s2"+s2);//abcde
system.out.println("s2.length():"+s2.length());//5
//public String(byte[] bytes,int index,int length)  :把从某索引开始的一定长度的字节数组转成字符串
String s3 = new String(bys,1,3);
system.out.println("s3"+s3);//bcd
system.out.println("s3.length():"+s3.length());//3
//public String(char[] value):把字符数组转成字符串
char[] chs = {'a','b','c','你','好'};
String s4 = new String(chs);
system.out.println("s4"+s4);//abc你好
system.out.println("s4.length():"+s4.length());//5
//public String(String original):把字符串常量值转成字符串
String s5 = new String("abcde");
system.out.println("s5"+s5);//abcde
system.out.println("s5.length():"+s5.length());//5
//Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例(对象)实现。
String s6="abcde";
system.out.println("s6"+s6);//abcde
system.out.println("s6.length():"+s6.length());//5

String的特点:一旦被赋值就不能改变。

String s = "hello";
s += "world";
System.out.println("s:"+s);//helloworld

String的特点

面试题:String s = new String("hello"); 与 String s = "hello";的区别:

方法区的常量池中有“hello”时,前者创建在堆内存中创建一个对象,后者不用创建对象。否者,前者需要分别在堆内存和方法区中创建一个对象,而后者需要在方法区中创建一个对象。

面试题图解

String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3==s1+s2);//false
//s3==(new StringBuilder(String.valueOf(s1))).append(s2).toString();
System.out.println(s3.equals((s1+s2)));//true
//s3.equals((new StringBuilder(String.valueOf(s1))).append(s2).toString());
System.out.println(s3=="hello"+"world");//true 易错
//s3=="helloworld"
System.out.println(s3.equals("hello"+"world"));//true
//s3.equals("helloworld")
  • 字符串如果是变量相加,先开空间,再拼接
  • 字符串如果是常量相加,先加,然后再常量池中找,如果有就直接返回,否者,就创建。

String 类的功能

判断功能

  • public boolean equals(Object obj);比较字符串的内容是否相同(区分大小写,如用户名)
  • public boolean equalsIgnoreCase(String str);比较字符串的内容是否相同,忽略大小写(验证码)
  • public boolean contains(String str);判断大字符串中是否包含小字符串
  • public boolean startsWith(String str);判断字符串是否是以某个指定的字符串开头
  • public boolean endsWith(String str);判断字符串是否是以某个指定的字符串结尾
  • public boolean isEmpty();判断字符串是否为空
  • 注意:
    • 字符串内容为空和字符串为空
      • String s = “”;
      • String s = null;
// public boolean isEmpty();判断字符串是否为空
String s1 = "hello";
String s2 = "";
String s3 = null;
System.out.println(s1.isEmpty());//false
System.out.println(s2.isEmpty());//true
System.out.println(s3.isEmpty());//字符串为空时,NullPointerException,空指针异常。

获取功能:

  • public int length();获取字符串的长度
  • public chart charAt(int index);返回指定索引位置的字符
  • public int indexOf(int ch);返回指定字符在此字符串中第一次出现处的索引
    • 为什么此处是int类型,而不是char类型
      • 原因:’a’ 和97其实都可以代表a.
  • public int indexOf(String str);返回指定字符串(首字母)在此字符串中第一次出现处的索引。
  • public int indexOf(int ch,int fromIndex);返回指定字符在此字符串中从指定位置后第一次出现处的索引
  • public int indexOf(String str,int fromIndex);返回指定字符串在此字符串中从指定位置后第一次出现处的索引
  • public String substring(int start);从指定位置开始截取字符串(包含sart 索引值对应的字符串)
  • public String substring(int start,int end);从指定位置开始到指定位置结束截取字符串(包括起始索引对应的字符串,不包括结束位置)

遍历获取字符串中的每一个字符

//char charAt(int index);
//int length()
String s = "helloworld";
for(int x=0;x<s.length();x++){
    System.out.print(s.charAt(x));
}

判断字符串中的大小写和数字

ASCII 码表 0—48 A—65 a—97
做大于等于加减乘除等操作的时候,char类型首先会转成int类型。

//已经遍历后,统计大小写和数字的个数
char ch = s.charAt(x);
if(ch>='0' && ch<='9'); numberCount++
if(ch>='a' && ch<'z'); smallCount++
if(ch>='A' && ch<='Z');bigCount++

转换功能:

  • public byte[] getBytes();把字符串转换为字节数组
  • public char[] toCharArray();把字符串转换为字符数组
  • public static String valueOf(char[] chs);把字符数组转成字符串
    • 注意:String类的valueOf方法可以把任意类型的数据转成字符串
  • public static String valueOf(int i);把int类型的数据转成字符串
  • public String toLowerCase();把字符串转成小写
  • public String toUpperCase();把字符串转成大写
  • public String concat(String str);把字符串拼接
String s = "JavaSE";
// public byte[] getBytes();把字符串转换为字节数组
btye[] bys = s.getBytes();
for(int x=0;x<bys.length;x++){
    System.out.println(bys[x]);//74,97,118,97,83,69
}
//public char[] toCharArray();把字符串转换为字符数组
char[] chs = s.toCharArray();
for(int x=0;x<chs.length;x++){
    System.out.println(chs[x]);//J a v a S E
}

其他功能

替换功能

  • public String replace(char old,char new)
  • public String replace(String old,String new)

去除字符串两空格

public String trim()

按字典顺序比较两个字符串

  • public int compareTo(String str);
  • public int compareToIgnoreCase(String str);
    依次比,如果每个字符都相同,就返回0,一旦有不同,就用前者字符的ASCII码值减去后面的。如果字符串长度不同(“hello”与“hel”)就返回字符串长度差。

compareTo()源码:

//字符串会自动转换成字符数组。
private final char value[];
public int compareTo(STring anotherString){
    int len1= value.length;//this.value.length---s1.toCharArray().length
    int len2=anotherString.value.length;//s2.value.length--s2.toCharArray().length
    int lim=Math.min(len1,len2);
    char v1[]=value;
    char v2[]=anotherString.value;
    int k = 0;
    while(k<lim){
        char c1=v1[k];
        char c2=v2[k];
        if(c1 != c2){
            return c1-c2;
        }
        k++;
    }
    return len1-len2;
}

案例

把int数组拼接字符串

int[] arr={1,2,3};
String s = "";
s += "[";
for(int x = 0;x<arr.length;x++){
    if(x==arr.length-1){
        s + arr[x];
        s +="]";
    }else{
        s +=arr[x];
        s +=", ";
    }
}
System.out.println(s);

字符串反转

String line = "abcde";
String result = "";
//把字符串转成字符数组
char[] chs=line.toCharArray();
//倒着遍历数组
for(int x=chs.length-1;x>=0;x--){
    result += chs[x];
}
System.out.println(result);

统计大串中小串出现的次数
思路:

  • 定义一个统计变量,初始值为0
  • 先获取一次小字符串在这个大串中第一次出现的索引
    • 如果索引值是-1 ,说明不存在,返回统计变量
    • 如果索引值不是-1,就说明存在,统计变量++
  • 把刚才的索引+小串的长度作为起始位置截取原始大串,得到一个新的字符串,并把该字符串重新赋值给大串。
  • 再返回第二步重新截取。
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值