------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
基本概念介绍.
字符串是一个特殊的对象。
字符串一旦初始化就不可以被改变。
两种方式:String str = "abcdeg"; String str1 = new String("abc") 前者可以看做是后者的简写吧。
下面对string的一些功能作介绍.
一、获取和判断功能
string提供了多个方法对字符串进行操作
1、获取:
(1)、int length():获取长度,字符串中包含的字符数,也就是字符串的长度,字符串是方法,数组是属性
(2)、根据位置获取位置上的某个字符
intindexOf(int ch):返回的是ch在字符串中第一次出现的位置
intindexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取str在字符串中的出现的位置
intindexOf(String str):返回的是ch在字符串中第一次出现的位置
intindexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中的出现的位置
2、判断:
(1)、字符串中是否包含一个子串
boolean contains(CharSequence s) 特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以,也可以用于对指定判断是否包含。
if(str.indexOf("aa")!=-1) 该方法既可以判断,也可以获取出现的位置
(2)、字符串中是否有内容
boolean isEmpty() 原理是判断长度是否为0,“” null不一样
(3)、字符串是否以指定内容开头
boolean startsWith(str)
(4)、字符串是否以指定内容结尾
boolean endsWith(str)
(5)、判断字符串内容是否相同
boolean equals(str);
(6)、判断内容是否相同,并忽略大小写
boolean equalsIgnoreCase(str)
二、转换功能
1、将字符数组转成字符串
构造函数:
String(char[] value)
String(char[] value, int offset, int count)将字符数组一部分转成字符串
静态方法:
static String copyValueOf(char[] data);
static String copyValueOf(char[] data,int offset,int count);
static String ValueOf(char[] data);
2、将字符串转成字符数组
byte[]getBytes()
byte[]getBytes(Charset charset)
3、将字节数组转成字符串
String(byte[]value)
String(byte[] value,int offset, int count)将字节数组一部分转成字符串
4、将字符串转成字节数组
char[] toCharArray() 将此字符串转换为一个新的字符数组
5、将基本数据类型转成字符串
static StringvalueOf(boolean b)
static StringvalueOf(char c)
static StringvalueOf(char[] data)
static StringvalueOf(char[] data, int offset, int count)
static StringvalueOf(double d)
static StringvalueOf(int i)
但是使用变量 + “” 这样转成字符串更方便
public class Lianxi1{
public static void main(String[] args){
method_trans();
}
public static void method_trans(){
char[] arr = {'a','b','c','d','e','f'};
String s = new String(arr);
String s = new String(arr,2,2);
sop(s);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
三、切割和替换功能
1、替换
String replace(charoldChar,char newChar)
2、切割
String[]split(String str)
3、子串,获取字符串中的一部分,
String substring(intbeginIndex)
String substring(intbeginIndex, int endIndex) //包含头,不包含尾部
public class Lianxi2{
public static void main(String[] args){
method_sub();
}
public static void method_split(){
String s = "liming,lisi,wangwu,xiaoqing,hehe";
String[] arr = s.split(",");
for(int i=0;i<arr.length;i++){
sop(arr[i]);
}
}
public static void method_sub(){
String s = "abcdefghjkl";
sop(s.substring(3));
sop(s.substring(2,5)); // 包含头,不包含尾部
}
public static void sop(Object obj){
System.out.println(obj);
}
}
五、比较和去除空格功能
1、将字符串转成大写或者小写
(1)、String toUpperCase();
(2)、String toLowerCase();
2、将字符串两端的多个空格去除
(1)、String trim();
3、对两个字符串进行自然顺序的比较
(1)、int compareTo(String);
如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0的值。
返回他们 ascle码值相减的结果
public class Demo{
public static void main(String[] args){
method_7();
}
public static void method_split(){
String s = "zhangsan,lisi,wangwu";
String[] arr = s.split(",");
for(int i=0;i<arr.length;i++){
sop(arr[i]);
}
}
public static void method_sub(){
String s = "abcdef";
sop(s.substring(2)); //cdef
sop(s.substring(2,4)); //cd 包含头,不包含尾部
}
public static void method_7(){
String s = " Hello Java ";
sop(s.toLowerCase());
sop(s.toUpperCase());
sop(s.trim());
String s1 = "acc";
String s2 = "aaa";
sop(s1.compareTo(s2));//2
sop(s2.compareTo(s1));//-2
}
public static void sop(Object obj){
System.out.println(obj);
}
}
public class Demo{
public static void main(String[] args){
method_7();
}
public static void method_split(){
String s = "zhangsan,lisi,wangwu";
String[] arr = s.split(",");
for(int i=0;i<arr.length;i++){
sop(arr[i]);
}
}
public static void method_sub(){
String s = "abcdef";
sop(s.substring(2)); //cdef
sop(s.substring(2,4)); //cd 包含头,不包含尾部
}
public static void method_7(){
String s = " Hello Java ";
sop(s.toLowerCase());
sop(s.toUpperCase());
sop(s.trim());
String s1 = "acc";
String s2 = "aaa";
sop(s1.compareTo(s2));//2
sop(s2.compareTo(s1));//-2
}
public static void sop(Object obj){
System.out.println(obj);
}
}
六、模拟一个trim方法,去除字符串两端的空格
1、判断字符串第一个位置是否是空格,如果是,继续向下判断,直到不是空格为止
2、判断字符串最后一个为止时候是空格,如果是,继续向前判断,直到不是空格为止
3、当开始和结尾都判断到不是空格时,就是要获取的字符串
4、开始位置不可以大于结束位置
[java] view plaincopy
public class Demo{
public static void main(String[] args){
String s = " aaa aa ";
sop("("+s+")");
s = myTrim(s);
sop("("+s+")");
}
public static String myTrim(String str){
int start = 0,end = str.length()-1;
while(start<=end&&str.charAt(start)==' '){
start++;
}
while(start<=end&&str.charAt(end)==' '){
end--;
}
return str.substring(start,end+1);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
七、将一个字符串进行翻转。将字符串中指定部分进行翻转
1、曾经学习过对数组的元素进行翻转
2、将字符串编程数组,对数组进行反转
3、将反转后的数组编程字符串
4、只要将反转指定反转部分的开始和结束为止作为参数传递即可
[java] view plaincopy
public class Demo{
public static void main(String[] args){
String s = "abcdef";
sop(s);
sop(reverseString(s));
sop(reverseString(s,1,4));
}
public static String reverseString(String str,int start,int end){
//字符串变数组
char[] chs = str.toCharArray();
//翻转数组
reverse(chs,start,end);
//将数组编程字符串
return new String(chs);
}
public static String reverseString(String str){
return reverseString(str,0,str.length());
}
private static void reverse(char[] arr,int x,int y){
for(int start=x,end=y-1;start<end;start++,end--){
swap(arr,start,end);
}
}
private static void swap(char[] arr,int x,int y){
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
public static void sop(Object obj){
System.out.println(obj);
}
}
八、获取一个字符串在另一个字符串中出现的次数 不可以使用split形式,因为如果关键字在开头,则切的时候出错
1、定义一个计数器
2、获取kk第一次出现的位置
3、从第一次出现位置后剩余的字符串中继续获取kk出现的位置,每获取一次就计数一次
4、当获取不到时候,技术完成。
[java] view plaincopy
public class Demo{
public static void main(String[] args){
String s = "kkdkhkkgdkskkfhgfdkksakdkkhgkkkjfdsh";
sop(getSubCount(s,"kk"));
}
public static int getSubCount(String str,String key){
int count = 0;
int index = 0;
while((index = str.indexOf(key,index))!=-1){
count++;
index = index+key.length();
}
return count;
}
public static void sop(Object obj){
System.out.println(obj);
}
}
九、获取两个字符串中最大相同子串,第一个动作:将短的那个字符串进行长度依次递减的子串打印
"abcwerthelloyuiodef"
"cvhellobnm"
1、将短的那个子串按照长度递减的方式获取到
2、将每获取到的子串去长串中判断是否包含,如果包含,则找到。
[java] view plaincopy
public class Demo{
public static void main(String[] args){
String s1 = "abcwerthelloyuiodef";
String s2 = "cvhellobnm";
sop(getMaxSubString(s2,s1));
}
public static String getMaxSubString(String s1,String s2){
String max = "",min = "";
max = (s1.length()>s2.length())?s1:s2;
min = (max==s1)?s2:s1;
for(int x=0;x<s2.length();x++){
for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++){
String temp = min.substring(y,z);
if(max.contains(temp)){
return temp;
}
}
}
return "";
}
public static void sop(Object obj){
System.out.println(obj);
}
}
十、StringBuffer(常见功能-添加)
(1)、字符串的组成原理就是通过该类实现的。
(2)、StringBuffer可以对字符串内容进行增删
(3)、StringBuffer是一个容器
(4)、很多方法与String相同
(5)、StringBuffer是可变长度的
1、Stringbuffer是字符串缓冲区,是一个容器,
长度可变化
可以操作多个数据类型
最终会通过toString方法变成字符串
C create U update Rread D delete
(1)、存储
StringBuffer append():将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(index,数据):可以将数据插入到指定位置上去
(2)、删除
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end
StringBuffer deleteCharAt(index):删除指定位置的字符
sb.delete(0,sb.length()); 清空缓冲区,删除全部
sb.delete(2,3); 删除一个字符,应该用sb.deleteCharAt(2);
(3)、获取
charcharAt(int index)
intindexOf(String str)
intlastIndexOf(String str)
intlength()
Stringsubstring(int start,int end) 注意,返回的是string,不是StringBuffer
(4)、修改
StringBuffer replace(start,end,string);
StringBuffer reverse()
voidgetChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此序列复制到目标字符数组 dst。
[java] view plaincopy
public class Demo{
public static void main(String[] args){
method_getChars();
}
public static void method_getChars(){
StringBuffer sb = new StringBuffer("abcdef");
char[] chs = new char[4];
sb.getChars(1,4,chs,1);
for(int x=0;x<chs.length;x++){
sop("chs["+x+"]="+chs[x]+";");
}
/*
chs[0]=
chs[1]=b;
chs[2]=c;
chs[3]=d;
*/
}
public static void method_update(){
StringBuffer sb = new StringBuffer("abcde");
sb.replace(1,4,"java");
sop(sb.toString());
}
public static void method_del(){
StringBuffer sb = new StringBuffer("abcde");
sb.delete(0,sb.length());
//sb.delete(1,3);//删掉 bc,2两个,因为不包含尾
sop(sb.toString());
}
public static void method_add(){
StringBuffer sb = new StringBuffer();
sb.append("abc").append(true).append(34);//方法调用链
sb.insert(1,"qq");
sop(sb.toString());
// StringBuffer sb1 = sb.append(34);
// sop(sb.toString());
// sop(sb1.toString());
// sop("sb==sb1 = "+(sb==sb1));//true
}
public static void sop(Object obj){
System.out.println(obj);
}
}
十二、StringBuilder
1、JDK 1.5之后,出现了StringBuilder
2、一个可变的字符序列。此类提供一个与 StringBuffer兼容的 API,但不保证同步。该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer要快。
(1)、StringBuffer是线程同步 多线程也可以,自身有判断锁,但是效率低
(2)、StringBuilder是线程不同步 不是多线程的,不用判断锁,所以单线程都用这个
3、升级三个因素
(1)、提高效率
(2)、简化书写
(3)、提高安全性
十三、基本数据类型对象包装类
1、基本数据类型 引用数据类型
byte Byte
int Integer
short short
long Long
float Float
double Double
char Character
2、基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换
3、基本数据类型转成字符串
基本数据类型+""
基本数据类型.toString(基本数据类型)。如:Integer.toString(34)//将34编程“34”
4、字符串转成基本数据类型
Integer.parseInt("123") 必须传入数字格式字符串
Long.parseLong("123")
Double.parseDouble(1.23)
字符不需要,它本身就是字符
5、十进制转成其他进制
toBinaryString()
toHexString
toOc
6、其他进制转为十进制
Integer.parseInt("数字字符串",该字符串的进制)
十四、基本数据类型对象包装类新特性 JDK 1.5之后出现的新特性
1、自动装箱
Integer y = newInteger(123);
可以写成
Integer y = 123;
2、自动拆箱
Integer x = new Integer(123);
x = x + 2;
进行自动拆箱,将x变为int类型,和2进行加法运算,在将和进行装箱赋给x
3、integer 对象,可以是 null,但是int不会,要注意
4、 //因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会在开辟新空间
Integer m =128;
Integer n =128;
sop("m==n:"+(m==n));//false
Integer a =128;
Integer b =128;
sop("a==b:"+(a==b));//true
[java] view plaincopy
public class Demo{
public static void main(String[] args){
Integer x = new Integer("123");
Integer y = new Integer(123);
sop(x==y);//false
sop(x.equals(y));//true
//因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会在开辟新空间
Integer m = 128;
Integer n = 128;
sop("m==n:"+(m==n));//false
Integer a = 128;
Integer b = 128;
sop("a==b:"+(a==b));//true
}
public static void sop(Object obj){
System.out.println(obj);
}
}
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------