JAVA.long.String类

构造(常用)

  1. 常量对象构建:String s1="abc";
  2. 构造方法
String (String S1);
String (char a[]);
Stirng (char a[],int StartIndex,int Count);
String (byte b[]);
  1. 其他方法
Stirng s1="abs".toUpperCase();

缺点:字符串对象的不变性

String对象创建后不能被修改,是不可以改变的
修改:创建了新的对象,所指的内存空间不同。

image

如果频繁改变字符串,使用StringBuffer或者StringBuilder(点击前面查看)

常用方法

提示
src在软件中都是指source,源头。
sub表示相减,英文是subtract

基础



String length();//返回字符串长度

转化

//输入占据位置
System.out.printf("%10d %.2f\n",12002,100.1);
String str3=String.format("%10d %.2f",12002,100.1);
String toUpperCase();//将字符转化为大写字符
String toLowerCase();//将字符转化为小写字符

比较

boolean String equals(String s2);//比较两者字符序列是否相同
boolean String equalslgnoreCase(String s2)//比较过程中忽略符号大小写

boolean startsWith(String s);//判断当前字符串对象的前缀是否是参数s制定的字符串
boolean endsWith(String s);//判断当前字符串对象的后缀是否是参数s指定的字符串;
boolean regionMatches(int firstStart ,String other,int otherStart ,int length);//从当前 字符串索引  firstStart位置处开始,取长度为length的一个字串,并将这个子串个参数other指定的一个子串进行比较。
int compareTo(String s);//比较是否相同
int compareTolgnoereCase(String s);//比较时忽略大小写

截取连接

//截取
String substring (int startpoint);//截取字符
String substring (int startpoint ,int end);//左闭右开

//连接
String concat(String s)//将s连接到字符串后
	 //concat->concatenate

查询

String charAt(index);//返回索引处的char值

boolean contains(String s)//判断字符串中是否包含指定的字符或字符串。

int indexOf(String str);//判断str串是不是目标串的子串,如果是返回位置,否返回-1
int indexOf(String str,int fromlndex);//从fromlndex开始匹配

int lastIndexOf(String s);
//返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
int lastIndexOf(String s,int fromlndexs);//从指定位置开始

与其他数据类型转换

与基本数据类型

   //"100"-->100
	    String str1="100";
	   int i=Integer.parseInt(str1,10);
      //  前面写需要转化的字符串,后面写进制
	   System.out.println(i);

	   //100->"100"
	   String str21=100+"";
	   String str211=""+100;
	   String str22=String.valueOf(100);//转化成字符串的方法
	   System.out.println(str21);
	   System.out.println(str211);
	   System.out.println(str22);
//Integer和Long 将数值转化为某进制的字符串
    String str22=String.valueOf(100,10);    //  前面写需要转化的数值,后面写进制


与数组

与字符数组

//char[] -> String(构造方法)
String (char[]);//全部字符
String(char[],int offset,int length);//使用部分字符

//String -> char[](成员方法)
char[] toCharArray();//存放全部字符串
void getChars(int start,int end,char c[],int offset);//存放部分字符串
public void getChars(int srcBegin,
                     int srcEnd,
                     char[] dst,
                     int dstBegin)

与其他数组

//数组->String
  String  str1="123";
   byte[] bytes=str1.getBytes();
  System.out.println(Arrays.toString(bytes));//输出:

//String->数组
  String str13=new String(bytes);

字符串池(String Pool)

目的

JVM为了提高性能,减少内存开销,避免 字符串对象的重复创建。

在程序执行时,对于符合条件的字符串对象,在String pool中查询是否存在

  • 如果找到就返回
  • 找不到,就创建新对象,然后返回

存放的对象

  1. 字符串常量
  2. 有限个字符串常量进行“+”运算的结果 (加号链接的是字符串的引用,不是常量相加)
  3. String的intern()方法返回的字符串对象

intern()方法

执行过程:
在程序执行时,
先在String pool中查询是否存在相同内容的String对象

  • 如果有,取出引用并返回
  • 如果没有,就创建新对象放入String Pool,然后返回新对象引用

image

测试代码

//提示“==”比较的是地址

public class Main {

	public static void main(String[] args) {
		//测试字符串常量
		String str1="123123";
		String str11="123123";
		String str12="123";
		String str2=new String("123123");
		String str22=new String("123123");
	System.out.println(str1==str11);//true
	System.out.println(str1==str12);//false
	System.out.println(str1==str2);//false
	System.out.println(str1==str22);//false
	System.out.println(str2==str22);//false
		
		  //测试有限个常量“+”运算
	   String str3="123";
	   String str33="456";
	   String str4="123"+"456";
	   String str44="123456";
	   System.out.println(str4==str44);//true
	   String str5=str3+str33;
	   System.out.println(str4==str5);
	   /*
	    *结果:false
	    *原因:str3,str33不是字符串常量,是字符串引用 
	    */

		 //测试String.intern()方法
	   String str6=str5.intern();
	   System.out.println(str6==str4);//true
	}
}

拼接、替换与分解

拼接

 String str31="123";
	   String str32="456";
	   String str33=str31+str32;
	   System.out.println(str33);
	   
	   for(int k=0;k<10;k++)
	   {
		   str1+=String.valueOf(k);
		   //会产生大量无用序列,此时应该为 StringBUffer(保证线程安全,较慢)/StringBuilder(不保证线程安全,较快)
		   System.out.println(str1);
	   }

正则表达式(regex):

定义:
是对字符串操作的一中逻辑公式;是用事先定义好的一些特定字符及其组合,组成的“规则字符串”;用来表达对字符串的一种过滤逻辑。
是一种文本模式,描述在搜索文本时要匹配的1个或多个字符串。
作用: 作为分割(或其他作用)的标记
组成:

  • 一些普通字符:
    • 包括:大小写的字母和数字
  • 和一些元字符:

注解:\x中第一个“\”代表转转义符,后面“\x”才是表达式
常用正则表达式

  • “\d”代表0-9中的任何一个数字
  • “\D”代表非数字字符
  • “\d+”截取非数字
  • “\D+”截取数字

相关方法
public boolean matches(String regex)判断当前字符串对象是否和参数regex指定的正则表达式匹配

分解及替换方法

public boolean matches(String regex)
//判断当前字符串对象是否和参数regex指定的正则表达式匹配

//分解
 public String[] split(String regex);

//替换
public String[] replaceFirst(String regex,String replacement
//只替换第一个,用regex规则替换成replacement
public String[] replaceAll(String regex,String replacement
// 替换所有,用regex规则替换成replacement

注意:
如果分割后和没有发生变化,则不会产生新的对象,不同则产生新的对象,原理对象还存在

转StringBuffer

posted @ 2021-10-27 20:54  kingwzun  阅读(241)  评论(0编辑  收藏  举报