JAVA.long.String类
构造(常用)
- 常量对象构建:
String s1="abc";
- 构造方法
String (String S1);
String (char a[]);
Stirng (char a[],int StartIndex,int Count);
String (byte b[]);
- 其他方法
Stirng s1="abs".toUpperCase();
缺点:字符串对象的不变性
String对象创建后不能被修改,是不可以改变的
修改:创建了新的对象,所指的内存空间不同。
如果频繁改变字符串,使用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中查询是否存在
- 如果找到就返回
- 找不到,就创建新对象,然后返回
存放的对象
- 字符串常量
- 有限个字符串常量进行“+”运算的结果 (加号链接的是字符串的引用,不是常量相加)
- String的
intern()
方法返回的字符串对象
intern()方法
执行过程:
在程序执行时,
先在String pool中查询是否存在相同内容的String对象
- 如果有,取出引用并返回
- 如果没有,就创建新对象放入String Pool,然后返回新对象引用
测试代码
//提示“==”比较的是地址
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
注意:
如果分割后和没有发生变化,则不会产生新的对象,不同则产生新的对象,原理对象还存在