Java基础之String

CharSequence

CharSequence

StringStringBufferStringBulider类都实现了该接口

  • StringBuliderStringBuffer类构造方法支持传入CharSequnce对象
  • CharSequence 实例对象描述的是 字符串

Java String 类

  • Java中字符串属于对象,Java提供了String类来创建和操作字符串

    • String类不可改变,一旦创建值就无法改变

    • String s = "Google";	
      System.out.println("s = " + s);
      s = "Runoob";
      System.out.println("s = " + s);
      /**
      运行结果:
      Google
      Runoob
      */
      // s 只是 String 对象的引用,并不是对象本身
      // 执行 s = "Runoob" 时创建新的对象 "Runoob",而原来的 "Google" 还存在于内存中
      
  • String类底层定义了数组来存放对象内容

    • JDK 8 及以前使用字符数组 final char[]
    • JDK 9 以后使用字节数组 final byte []
    • 使用 final 封装的数组
  • String 类型字符串可以向所有类型转换

    • String是使用字符串时首选类
    • String类实例对象**(字符串)不可改变**
    • 表面的改变是生成了新的实例对象并指向原来的引用
  • String 中的所有的方法,都是对于 char 数组的改变

    • 方法内部都是返回一个新的 String 实例
  • String创建的字符串存储在公共池中,而new创建的对象在堆上

String s1 = "Runoob";				//直接创建
String s2 = "Runoob";				//直接创建
String s3 = s1;						//相同引用
String s4 = new String("Runoob");	//String对象创建
String s5 = new String("Runoob");	//String对象创建

在这里插入图片描述

  • 字符串长度:length()方法,返回字符串对象包含的字符数

  • 连接字符串:.concat()+

    • +操作使用StringBuffer类的.append()方法实现,返回新的String对象
string1.concat(string2);
//返回 string2 连接 string1 的新字符串,也可以对字符串常量使用 concat() 方法,如:
"我的名字是 ".concat("Runoob");  // 我的名字是Runnoob
//更常用'+'操作符来连接字符串,如:	
"Hello," + " runoob" + "!"      // Hello, runnoob!
    
public class StringDemo {
    public static void main(String args[]) {     
        String string1 = "菜鸟教程网址:";     
        System.out.println("1、" + string1 + "www.runoob.com");  
    }
}
/*
输出结果:
1、菜鸟教程网址:www.runoob.com
*/    
String a = "a";
String b = "b";
String c = a + b;
相当于:
String c = new StringBuffer().append(a).append(b).toString();//指向地址是堆中new的StringBuilder对象
格式化字符串

输出格式化数字可用 printf() 和 format() 方法

  • 静态方法format() 返回一个String 对象而不是 PrintStream 对象
  • 创建可复用的格式化字符串
String s = String.format("浮点型变量的值为%f, " + "整型变量的值为*d" + "字符串类型的变量的值为%s" ,floatVar ,intVar ,stringVar);
// %m.nf: m 位数,小数点后n位 float 类型输出
// %d:以整型输出;
// %s:以字符串类型输出
// %c: 以字符类型输出
String方法
equals()方法
  • String字符串使用 == 比较的是字符串在堆中的地址,而非内容

  • equals()方法可以直接比较字符串内容

    • 将固定的字符串放在前面,调用equals()方法

    • 避免另一个字符串为空引发空指针异常

      String str = new Scanner(System.out).nextLine();		//从键盘读取输入
      System.out.println("张三".equals(str));				  //使用equals()方法判断输入内容是否是 张三
      //“张三” 放在前面 可以避免用户输入空字符串 引起空指向异常
      
compareTo比较
  • 相等返回值0
  • 此字符串小于参数,则返回一个小于 0 的值;
  • 此字符串大于参数,则返回一个大于 0 的值。
  • 如果第一个字符和参数的第一个字符不等,结束比较,返回第一个字符的ASCII码差值
  • 如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,
    • 以此类推,直至不等为止,返回该字符的ASCII码差值
  • 如果两个字符串不一样长,但对应字符又完全一样,则返回两个字符串的长度差值
方法列表
方法(前缀为返回值类型)描述
char charAt(int index)返回指定索引处的char值
int compareTo(Object o)这个字符串和另一个对象比较
int compareTo(String anotherString)按字典顺序比较两个字符串
int compareToIgnoreCase(String str)按字典顺序比较,不考虑大小写
String concat(String str)指定字符串连接到此字符串结尾
boolean contentEquals(StringBuffer s)当且仅当字符串与指定的StringBuffer有相同顺序的字符时返回真
staic String copyValueOf(char[] data)返回指定数组中表示该字符序列的String
staic String copyValueOf(char[] data, int offset, int count)返回指定数组中表示该字符序列的String;data-字符数组、offset-子数组初始偏移量、count-子数组长度
boolean endswith(String str)测试此字符串是否以指定的后缀结束
boolean equals(Object anObject)将此字符串与指定的对象比较
boolean equalsIgnoreCase(String anotherString)将此String与另一个String比较,不考虑大小写
byte[] getBytes[]使用平台默认的字符集将此String编码为byte序列,并将结果存储到一个新的byte数组
byte[] getBytes(String charsetName)使用指定字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将字符从此字符串复制到目标字符数组;srcBegin – 字符串中要复制的第一个字符的索引、srcEnd – 字符串中要复制的最后一个字符之后的索引、dst – 目标数组、dstBegin – 目标数组中的起始偏移量
int hashCode()返回此字符串的哈希码
int indexOf(int i)返回指定字符在此子字符串第一次出现处的索引
int indexOf(int i, int fromIndex)返回指定字符在此字符串第一次出现处的索引,从指定的索引开始搜索
int indexOf(String str)返回指定子字符串在此字符串中第一次出现的索引
int indexOf(String str, int fromIndex)返回指定字符串在此字符串中第一次出现的索引,从指定的索引开始搜索
String intren()返回字符串对象规范化表示形式;返回值是一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。
int lastIndexOf(int i)返回指定字符在此字符串中最后一次出现的索引
int lastIndexOf(int i, int fromIndex)返回指定字符在此字符串中最后一次出现的索引,从指定的索引开始反向搜索
int lastIndexOf(String str)返回指定字符在此子字符串最后一次出现处的索引
int lastIndexOf(String str, int fromIndex)返回指定子字符串在此字符串中最后一次出现的索引,从指定的索引开始反向搜索
int length()返回此字符串的长度
boolean matches((.)String regex(.))告知此字符串是否匹配给定的正则表达式。
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)测试两个字符串区域是否相等;可以忽略大小写、toffset– 此字符串中子区域的起始偏移量、other – 字符串参数、ooffset – 字符串参数中子区域的起始偏移量、len – 要比较的字符数
boolean regionMatches(int toffset, String other, int ooffset, int len)测试两个字符串区域是否相等
String replace(char oldChar, char newChar)返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的
String replaceAll((.)String regex(.), String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
String replaceFirst((.)String regex(.), String replacement使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串
String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。(.$、 `
String[] split(String regex, int limit)根据匹配给定的正则表达式来拆分此字符串;regex – 正则表达式分隔符、limit – 分割的份数
boolean startsWith(String prefix)测试此字符串是否以指定的前缀开始
boolean startsWith(String prefix, int toffset)测试此字符串从指定索引开始的子字符串是否以指定前缀开始
CharSequence subSequence(int beginIndex, int endIndex)返回一个新的字符序列,它是此序列的一个子序列;beginIndex – 起始索引(包括)、endIndex – 结束索引(不包括)
String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串
String substring(int beginIndex, int endIndex)返回一个新字符串,它是此字符串的一个子字符串
char[] toCharArray()将此字符串转换为一个新的字符数组
String toLowerCase()使用默认语言环境的规则将此 String 中的所有字符都转换为小写
String toLowerCase(Locale locale)使用给定 Locale 的规则将此 String 中的所有字符都转换为小写
String toString()返回此对象本身(它已经是一个字符串!)
String toUpperCase()使用默认语言环境的规则将此 String 中的所有字符都转换为大写
String toUpperCase(Locale locale)使用给定 Locale 的规则将此 String 中的所有字符都转换为大写
String trim()返回字符串的副本,忽略(删除)前导空白和尾部空白
static String valueOf(primitive data type x)返回给定data type类型x参数的字符串表示形式
contains(CharSequence chars)判断是否包含指定的字符系列
isEmpty()判断字符串是否为空

StringBuffer 和 StringBuilder

选择使用

对字符串修改需要使用StringBufferStringBuilder

  • 使用时会对StringBuffer对象本身操作,而非生成新的对象
    • StringBuilder类在Java5被提出

StringBulider是线程不安全类,StringBuffer类是线程安全类

  • StringBuliderStringBuffer类基本一样
    • 常规使用优先选择String
    • 如果需要大量修改字符串的操作使用StringBulider类效率更高
      • StringBuilder相较于StringBuffer有速度优势
  • StringBuffer类的线程安全只能起到有限作用,可以在出现异常时继续执行而已
  • String类中+操作使用StringBuffer类的.append()方法实现,返回新的String对象
    • 无循环时单行用+拼接字符串没有性能损失,编译器会隐式的替换成 StringBuilder
      • 有循环时编译器可能没有足够智能的替换,仍会有不必要的性能损耗
    • 因此循环拼接字符串的时候,还是用 StringBuilder
public class RunoobTest{
    public static void main(String args[]){
        StringBuilder sb = new StringBuilder(10);	// 开辟 10 个空间
        sb.append("Runoob..");						// 添加元素
        System.out.println(sb);  					
        sb.append("!");								// 追加元素
        System.out.println(sb); 	
        sb.insert(8, "Java");						// 插入元素从索引为 8 的位置开始
        System.out.println(sb); 
        sb.delete(5,8);								// 删除索引 [5 ~ 7) 的元素
        System.out.println(sb);  
    }
}
运行结果:
Runoob..
Runoob..!
Runoob..Java!
RunooJava!

在这里插入图片描述

  • 在要求线程安全的情况下必须使用StringBuffer类
StringBuffer sBuff = new StringBuffer("菜鸟教程官网:");
    sBUff.append("www");
	sBuff.append(".runoob");
	sBuff.append(".com");
	System.out.println(sBuff);
//运行结果:菜鸟教程官网:www.runoob.com
主要方法

StringBuffer 和 StringBuilder 方法基本一样

主要方法
方法描述
pubilc StringBuffer append(String s)将指定的字符串追加到此字符序列
public StringBuffer reverse()将此字符序列用其反转形式取代
public delete(int start, int end)移除此序列的子字符串中的字符
public insert(int offset, int i)将int参数的字符串表示形式插入此序列中
insert(int offset, String str)将str参数的字符串插入此序列中
replace(int start, int end, String s)使用给定String中的字符串替换此序列的子字符串中的字符
常用方法
方法描述
int capacity()返回当前容量
char charAt(int index)返回此序列中指定索引处的char值
void ensureCapacity(int minimumCapacity)确保容量至少等于指定的最小值
void getChars(int strBegin, int srcEnd, char[] dst, int dstBegin)将字符从此序列复制到目标字符数组dst(会覆盖数组dst原位置的字符)
int indexOf(String str)返回第一次出现的指定字符串在该字符串中的索引(若指定范围内不存在输出-1)
int indexOf(String str, int fromIndex)从指定的索引处开始往后,返回第一次出现指定字符串在该字符串中的索引
int lastIndex(String str)返回最后一次出现指定字符串在该字符串中的索引(输出的是在原字符串中的索引,而非与指定索引的相对位置)
int lastIndex(String str, int fromIndex)从指定的索引处开始往前,返回最后一次出现指定字符串在该字符串中的索引
int length()返回长度(字符数)
void setCharAt(int index, char c)将给定索引处的字符设为ch
void setLength(int newLength)设置字符序列的长度
CharSequence subSequence( int start,int end)返回一个新的字符序列,该字符序列是此序列的子序列
String subString(int start)返回一个新的String,它包含此序列当前所包含的字符子序列
String subString(int start, int end)返回一个新的String,它包含此序列当前所包含的字符子序列
String toString()返回此序列中数据的字符串表示形式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值