package day05;
import java.util.Arrays;
public class Demo2 {
public static void main( String[] args ){
关于字符串String (public final class String)
1. String类是final的,也就是说final是最终类,无法被继承; StringBuilder与String并没有关系
2. String类的本质是 char[], 在内部维护了一个 字符数组,且为 final ; private final char value[];
也就是说,字符串在创建并被初始化之后,就无法再修改;
而我们平时操作的字符串修改,都是通过新创建一个String来实现的;所以每一次String的修改,
都需要新生成一个String对象;
3. String对象可以 通过 "+"来进行串联, 效果如果 string.concat(String str);
关于字符串的创建并且初始化:
java运行时会维护一个 String Pool(String缓冲池).String缓冲池用来存放运行中
产生的各种字符串,并且池中的字符串的内容不重复,而一般的对象不存在这个缓冲池中,并
且创建的对象仅仅存在于方法的堆栈区;
|
(1) |- 字符串字面值(非final String那种),当代码中出现有 字符串字面值时,jvm首先
会检查字符串常量池中是否存在该字符串的对象,如果已经存在,那么就不会在创建字符串
常量, 如果不存在,那么就会在字符串常量池中先创建该字符串的对象,然后返回;
( 字符串字面值 会被在StringPool中创建对象,并只维护一份 )
(2) String 的构造方法:
1. String() 创建一个空内容的字符串对象;
2. 有参String构造方法: --->> 用来将 byte[],int[],char[]等数组转化为String
byte[] 转 String
1) String(byte[] bytes);
2) String(byte[] bytes, int offset, int length);
char[] 转 String
3) String( char[] chars );
4) String( char[] chars, int offset, int length );
int[] 转 String
5) String( int[] ints );
String复制
6) String( String original );
(3)
查找
1) char charAt( int index ); 获取特定位置的字符(角标越界)
2) int indexOf( String str ); 查找子串第一次出现的index;
3) int lastIndexOf( String str ); 查找子串最后一次出现的位置
判断
1) 获取字符串的长度 int length();
2) 判断字符串是否为空 boolean isEmpty();
3) 判断字符串是否相等 boolean equals( Object anObject );
方法被重写,是判断两字符串中的所有字符是否相等;
4) 判断字符串是否以某子串开头: boolean startsWith( String substring );
5) 判断字符串是否以某子串结尾: boolean endsWith( String substring );
6) 判断字符串是否包含某子串: boolean contains( charSequences );
转换
1) 字符串 转 字符数组 char[] arr = str.toCharArray();
2) 字符串 转 byte数组 byte[] arr = str.getBytes();
字符串的大小写转换
1) 字符串转为 大写字母串 String toUpperCase();
2) 字符串转为 小写字母串 String toLowerCase();
截取
1) 截取从 startIndex到末尾 的子串 String subString( int startIndex );
2) 截取从 开头 到 endIndex的子串 String subString( 0, int endIndex );
3) 截取 某个范围内的子串 String subString( int startIndex, int endIndex );
4) 切割字符串 String[] split( String regex );
5) 去掉首尾的空格 String substring = str.trim();
替换 (查找到旧的子串,并且用新的串替换)
String replace( String oldChar, String newChar );
String str = "abffjjsdkjjksfjkjksjksjkkjddff";
int length = str.length();
System.out.println( "字符串的长度: "+length );
boolean isEmpty = str.isEmpty();
System.out.println( "字符串是否为空: "+ isEmpty );
char ch = str.charAt( str.length()-1 );
System.out.println( "最后一个字符为: "+ch );
int index = str.indexOf( "j" );
System.out.println( "首次出现的索引位置: "+index );
index = str.lastIndexOf( "j" );
System.out.println( "最后一次出现的索引位置: "+index );
//获取字符串长度
length = str.length();
//判断
//字符串是否为空
boolean empty = str.isEmpty();
System.out.println( "字符串是否为空: "+ empty );
//字符串是否相等
boolean equal = str.equals( "12344" );
System.out.println( "是否相等: "+ equal );
//字符串是否相等 -->> 忽略字符串的大小写进行比较
boolean equalIgnore = str.equalsIgnoreCase( "kjDDff" );
System.out.println( "是否相等(忽略大小写)"+ equalIgnore );
//字符串是否以某子串开头
boolean start = str.startsWith( "abffjj" );
System.out.println( "是否开头: "+ start );
//字符串是否以某子串结尾
boolean end = str.endsWith( "kjddff" );
System.out.println( "是否结尾: "+end );
//字符串是否包含子串
boolean contain = str.contains( "dffffg" );
System.out.println( contain );
//转换:
String s = "abcdedfddds";
char[] arr = s.toCharArray();
System.out.println( Arrays.toString( arr ) );
byte[] arr1 = s.getBytes();
System.out.print( Arrays.toString( arr1 ) );
s = s.toUpperCase();
System.out.println( "大写: "+s );
s = s.toLowerCase();
System.out.println( "小写: "+s );
String substring = s.substring( 5 );
System.out.println( "从startIndex开始截取: "+substring );
substring = s.substring( 0, 5 );
System.out.println( "从0到endIndex截取"+ substring );
substring = s.substring( 5, 10 );
System.out.println( "从5到10范围截取"+substring );
//trim
s = " a b c abcabc avcdabab ";
substring = s.trim();
System.out.println( "去掉首尾的空格: "+ substring );
//替换
substring = s.replace( "ab","ee" );
System.out.println( "替换: "+substring );
}
}