java lang包不需要导包
1、字符串字面值可以被看成字符串对象
2、字符串是常量,一旦被赋值,就不能改变
toString()方法返回对象本身,当改变值是实际是改变了地址值
String类的构造方法
public String()默认空行构造方法
public String(byte[] bytes) 对byte数组进行解码操作
public String(byte[] bytes,int index ,int length)把字节数组一部分转换成字符串
public String(char[] value)把字符数组转换成字符串
public String(char[] value,int index ,int length)把字符数组的一部分转换成字符串
public String (String original) 把字符串常量值转成字符串
String类的判断功能
s1.equals(s2) 字符串等价,不忽略大小写
s1.equalsIgnoreCase(String str)比较字符串的内容想否相同 ,忽略大小写
s1.contains(str) 判断大字符串是都包含子字符串
s1.startsWith(String str) 判断字符串是否以指定字符串开头
s1.endsWith(String str) 判断字符串是否以指定字符串结尾
s1.isEmpty()判断字符串是否为空
“”和null的区别
“”是字符串常量,同时也是一个String类对象,是对象就可以调用其方法
null 是空常量,不能调用任何方法,否则会出现空指针异常,null常量可以给任意的引用数据类型赋值
String类的获取动能
str.length 返回长度
string charAt(int index) 获取指定索引位置的字符,超出位置 StringIndexOutOfBoundsException
indexOf(int ch)获取指定字符在此字符中出现的第一处索引位置
indexOf(String str)获取指定字符串在此字符中出现的第一处索引位置
indexOf(int ch,int index)从指定位置开始,获取指定字符在此字符中出现的第一处索引位置
indexOf(String str,int index)从指定位置开始,获取指定字符在此字符中出现的第一处索引位置
lastIndexOf
subString(int start) 从指定位置开始截取字符串,默认到末尾
subString(int start,int end) 从指定位置开始截取字符串,并到指定位置结束
字符串的遍历:
for(int i = 0 ; i<str.length(); i++){
char c = str.charAt(i);
}
String类的转换功能
byte[] getBytes() 把字符串转换为字节数组 GBk码 一个中文代表两个字节,GBk码表,中文的第一个字节肯定是负数
char[] toCharArray()把字符串转换为字节数组
static String valueOf(char[] chs) 把字符转换成字符串
static String valueOf(int i) 把字符转换成字符串,把int类型的数据转换为字符串,可以把任意类型的数据转换为字符串
抽取方法快捷键 alt+shift+M
str.toLowerCase() 是对原来的字符串进行改造并赋值给新的字符串,注意一定是返回值才是修改后的
str.toUpperCase()
str.concat(str2) 拼接字符串
String类的其他功能
字符串代替
str.replace(char old ,char new )
str.replace(string old,string new)
CharSequence 字符串的父类
字符串去除空格的方法//去除的时开头和末尾的演示
str.trim();
字符串按照字典顺序比较两个字符串:
int i = str.compareTo(String str) 正数(前比后大)、负数和零,从第一个字母开始比较,相同继续,不同则返回,完全一样的按照长度比较
int i = str.compareToIgnoreCase(String str)
注意char的转换都是Unicode值(AscII隶属于Unicode表)
字符串的翻转
1、将字符串转换成字符数组
2、将遍历字符数组,并在此拼接成字符串
案例 统计大串中小串出现的次数
1、定义计数器,变量为0
2、利用IndexOf()方法来判断大串中的小串,如果没有返回-1;如果有返回索引值
3、根据获取索引值,截取字符串
StringBuffer类
1、属于Java.lang
2、线程安全的可变字符串序列(线程安全效率低,线程不安全效率较高)
StringBuffer和String的区别
String是一个不可变的字符序列,而StringBuffer是一个可变的字符序列,执行同步
StringBuilder是不同步的,线程不安全,但是速度快
StringBuffer的构造方法
public StringBuffer();初始容量为16 若没超出,不会分出新的缓冲区数组
public StringBuffer(CharSequence seq);父类引用放子类对象
public StringBuffer(int capacity);
public StringBuffer(String str);
初始容量
stringBuffer.capacity(),理论值
长度length()不是初始容量方法,实际值
如果构造方法放入字符串,StringBuffer的容量是capacity+length
------------------------------------------------------------------
StringBuffer的添加功能
StringBuffer sb = new StringBuffer();
sb= sb.append(String str...)
注意引用指向了同一个对象,所以每一个引用的值都是相同的,不断在向字符缓冲区增加内容
指定位置添加sb.insert(int index(具体位置),"heima");但是要注意索引越界异常的问题,三索引指代是数组内的第四个位置
StringBuffer的删除功能
StringBuffer sb = new StringBuffer();
sb.delete(int index(具体的位置)); 注意索引越界异常
sb.delete(int start,int end);删除结果包含头但不包含尾
清空缓冲区sb.delete(0,sb.length());
StringBuffer的替换和反转功能
StringBuffer sb = new StringBuffer("xxxxxxxxxx");]
sb.replace(int start,int end,str);包头不包尾
sb.reverse()字符串反转
-----------------------------------------------------------------------
StringBuffer的注意事项
String str = sb.subString(int start) 指定位置到末尾,注意是String接收
subString(int start,int end)包头不包尾,只改变字符串,StringBuffer不改变
StringBuffer和String互相转换
String--->StringBuffer
Stringbuffer sb = newStringBuffer(String str);
通过构造方法将字符串转换为StringBuffer
或者使用append方法将字符串转换为StringBuffer
StringBuffer--->String
String s1 = new String(StringBuffer);
s1 =sb.toString();
s1 = sb.subString(0,sb.length());
-----------------------------------------------------------------------------
StringBuffer和StringBudder的区别:方法是一模一样的
StringBuffer 是JDk1.0 线程安全效率低
StringBulider 是JDK1.5 线程不安全效率高
两者作为参数传递时,
基本数据类型的值传递,不改变值
引用数据类型的值传递,改变其值
-----------------------------------------------------------------------------
冒泡法:(一定是向后排序)
如果前面元素比后面大,交换位置
for(int i = 0;i < arr.length;i++)
for(int j = 0; j< arr.length-i-1;j++)
if(arr[j]>a[j+1]){
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1] = temp
}
-----------------------------------------------------------------------------选择排序(第一个位置依次与其他位置比较)
for(int i =0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]<a[j]){
int temp = arr[j];
arr[j]=arr[i];
arr[i] = temp
}
}
-----------------------------------------------------------------------------二分查找(前提是数组排列有序) 不应该有重复元素,否则是找不到的
int min = 0;
int max = arr.length-1;
int mid = (min+max)/2
while(arr[mid] != num){
if(arr[mid]>num){
max = mid -1;
}else {
min = mid +1;
}
mid = (min+max)/2;
if(min>max){
break;
}
}
-----------------------------------------------------------------------------Array类
Arrays.toString(int[] a)
Arrays.sort(int[] a);
Attray.binarySearch(int[] a ,int key);如果没有找到 则放在负的插入点-1
-----------------------------------------------------------------------------
基本数据类型包装类 在对象中定义更多的方法操作该数据
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
bool Boolean
构造方法 public Integer(int value)
public Integer(String s(必须是整形数字字符串 不然会报错) )
可以将整数转换成对应进制的数字Binary Hex Octal
静态常量最大值max_value 2^31-1和最小值min_value -2^31
int 和String的转换
int - String
1、利用""拼接
2、public staic String valueOf(int i);
3、int - Integer - String
Interger类的toString()方法
4、public static String toString(int i);
String ---int
int i = new Integer(String str).intValue();
public static int parseInt(String s);
注意 只有Char类型没有parseInt()的方法,也就是Character中并没有该种方法
字符串到字符转换用toCharArray()就可以
JDK5的拆箱、装箱操作
自动拆箱 把包装数据类型转换成基本数据类型
// int i = new Integer().intValue(i1);
int i = Integer i1;
自动装箱 把基本数据类型转换成包装数据类型
// Interger i = 100;
Integer i = new Integer(100);
注意在装箱过程中,如果数字在-128-127 代表byte取值范围,在其中的不会出现问题,只会去常量数组中获取值,而非创建对象地址,该常量数组中共存有255个值