学习日志_String类
Java语言_String
{
String 类代表字符串。
Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变
的字符串。因为 String 对象是不可变的,所以可以共享。
String最大特点:一旦被初始化就不可以被改变。
String类重写了Object类中的equals方法,该方法用于判断字符串是否
相同。
String类常见操作
1.获取
①int length()//字符串中包含的字符数,也就是字符串的长度。
②char charAt(int index)//根据位置获取位置上某个字符。
③int indexOf(int ch)//返回指定字符在此字符串中第一次出现的位置。
④int indexOf(int ch,int fromIndex)//返回在此字符串中第一次出现
指定字符处的位置,从指定的位置开始搜索。
⑤int indexOf(String str)//返回指定子字符串在此字符串中第一次出
现处的位置。
⑥int indexOf(String str,fromIndex)//返回指定子字符串在此字符串
中第一次出现处的位置,从指定的位置开始。
2.判断
①boolean contains(CharSequence s)//字符串中是否包含某一个子串。
②boolean isEmpty()//判断字符串中是否为null,为null时返回true。
③boolean startsWith(String str)//判断字符串是否以指定内容开头。
④boolean endsWith(String str)//判断字符串是否以指定内容结尾。
⑤boolean equals(Object anObject)//将此字符串与指定的对象比较。
当且仅当该参数不为null,并且是与此对象表示相同字符序列的String对
象时,结果才为 true。
⑥boolean equalsIgnoreCase(String anotherString)//将此String与另
一个 String 比较,不考虑大小写。
3.转换
①构造函数:String(char[] value)//将字符数组转换为字符串.
②构造函数:String(char[] value,int offset,int count)//分配一个
新的String,它包含取自字符数组参数一个子数组的字符。offset 参数
是子数组第一个字符的位置,count 参数指定子数组的长度。该子数组
的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。
③静态方法:static String copyValueOf(char[] data)//复制字符数组
生成一个新的String。
④静态方法:static String copyValueOf(char[] data,int offset,int
count)//复制字符数组,从指定位置开始到指定位置结束,生成一个新的
String。
⑤将基本数据类型转换成字符串:
static String valueOf(char[] data)//返回 char 数组参数的字符串表示形式。
static String valueOf(boolean b)//返回 boolean 参数的字符串表示形式。
static String valueOf(char c)//返回 char 参数的字符串表示形式。
static String valueOf(char[] data, int offset, int count)//返回 char
数组参数的特定子数组的字符串表示形式。
static String valueOf(double d)//返回 double 参数的字符串表示形式。
static String valueOf(float f)//返回 float 参数的字符串表示形式。
static String valueOf(int i)//返回 int 参数的字符串表示形式。
static String valueOf(long l)//返回 long 参数的字符串表示形式。
static String valueOf(Object obj)//返回 Object 参数的字符串表示形式。
⑥char[] toCharArray()//将此字符串转换为一个新的字符数组。
4.替换
①String replace(char oldChar,char newChar)//原字符串不会被改变,将会
生成一个新字符串。
5.切割
①String split(String regex)//根据给定正则表达式的匹配拆分此字符串。
6.获取子串
①String subString(int beginIndex)//从指定位置开始到结尾,获取一个新的
字符串。
②String subString(int beginIndex,int endIndex)//从指定位置开始到指定位置
结束,获取一个新的字符串(包含头,不包含尾)。
7.大小写,去除空格,比较
①将字符串转换成大写或者小写
String toUpperCase();//大写
String toLowerCase();//小写
②将字符串中两端的空格去除
String trim();
③对两个字符串进行自然顺序比较
int compareTo(String str);
部分操作示例:
/*字符串_获取和判断*/
class StringTest
{
public static void main(String[] args)
{
String str = "abstrNadeDakeslkn";
sop("原字符串: "+str);
//获取字符串长度
sop("获取字符串长度: "+str.length());
//获取字符串中某个位置的字符
sop("获取字符串中第3个位置的字符: "+str.charAt(3));
//返回指定字符在此字符串中第一次出现处的索引。
sop("字符N所在的位置: "+str.indexOf('N'));
//返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
sop("从第5个字符开始查找,D所在的位置: "+str.indexOf('D',5));
//返回指定子字符串在此字符串中第一次出现处的索引。
sop("字符串Dake所在的位置: "+str.indexOf("Dake"));
// 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
sop("从第5个字符开始查找,字符串kesl的位置: "+str.indexOf("kesl",5));
String str2 = "PublicDemo.java";
System.out.println("字符串: "+str2);
//当且仅当此字符串包含指定的 char 值序列时,返回 true。
sop("查看字符串中是否包含Demo: "+str2.contains("Demo"));
//当且仅当 length() 为 0 时返回 true。
sop("字符串中是否没有内容: "+str2.isEmpty());
//测试此字符串是否以指定的前缀开始.
sop("字符串是否是以Public开头: "+str2.startsWith("Public"));
//测试此字符串是否以指定的后缀结束。
sop("字符串是否是以.java结尾:"+str2.endsWith(".java"));
//将此字符串与指定的对象比较。
sop("比较两个字符串是否相同: "+str2.equals("PublicDemo.java"));
// 将此 String 与另一个 String 比较,不考虑大小写。
sop("比较两个字符串是否相同,不考虑大小写:"+str2.equalsIgnoreCase("PUBLICdemo.java"));
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
/*字符串_转换*/
class StringTransition
{
public static void main(String[] args)
{
char[] ch = {'H','e','l','l','o',',','W','o','r','l','d','!'};
String str = new String();
sop("字符数组转字符串: "+new String(ch));
sop("字符数组转字符串: "+str.valueOf(ch));
sop("字符数组部分转字符串: "+new String(ch,6,5));
sop("static字符数组转字符串:"+new String().copyValueOf(ch));
sop("static字符数组部分转字符串:"+str.copyValueOf(ch,0,5));
String str2 = "Hello,Java!";
char[] ch2 = str2.toCharArray();
for (int x=0;x<ch2.length;x++)
{
sop("将字符串转换成字符数组: "+ch2[x]);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
/*字符串_替换,切割,获取子串*/
class StringOperateTest
{
public static void main(String[] args)
{
String str = "Hello,World!";
String str2 = "张三,李四,王五,赵六";
sop("原字符串: "+str);
sop("字符串的字符替换: "+str.replace('W','w'));
sop("字符串的字符串替换: "+str.replace("World","Java"));
sop("原字符串: "+str2);
String[] arr = str2.split(",");
for (int x=0;x<arr.length;x++)
{
sop("切割后的字符串: "+arr[x]);
}
sop("获取一个新的字符串,从指定位置开始到结尾: "+str.substring(6));
sop("获取一个新的字符串,从指定位置开始到指定位置结尾,包含头,不包含尾: "+str.substring(0,5));
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
练习:
/*需求:模拟一个trim方法,去除字符串两端的空格
思路:1,判断字符串第一个字符是否为空格,如果是继续向下判断,
直到不是空格为止,结尾处也是如此。
2,当开始和结尾处都不是空格时,获取当前字符串。
*/
class StringTrimTest
{
public static void main(String[] args)
{
String str = " Hello,world ";//创建字符串
int start = 0;//定义头指针
int end =str.length()-1;//定义尾指针
//判断头指针尾指针是否越界和字符是否为空格
while(start<=end && str.charAt(start)==' ')
start++;
while(start<=end && str.charAt(end)==' ')
end--;
System.out.println("str="+str);
System.out.println(start);
System.out.println(end);
System.out.println("str="+str.substring(start,end+1)+"...");
System.out.println("str="+str.trim()+"---");
}
}
/*需求:将一个字符串进行反转,将字符串中指定的部分进行反转
思路:将字符串变成数组,对数组进行反转。
然后将反转后的数组变成字符串
*/
class StringReverseTest
{
public static void main(String[] args)
{
String str = "i6aklm3eiz38cd2lw";//创建字符串
sop("字符串长度: "+str.length());
sop("原字符串: "+str);
sop("反转后字符串: "+reverseString(str,6,9));
}
public static String reverseString(String str,int x,int y)
{
//将字符串变成数组
char[] arr = str.toCharArray();
//反转字符串
reverse(arr,x,y);
//字符数组变成字符串
return new String(arr);
}
public static String reverseString(String str)
{
return reverseString(str,0,str.length());
}
public 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 start,int end)
{
char temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
/*需求:获取两个字符串中最大相同子串
思路:将短的那个子串按照长度递减的方式获取到
将每获取到的子串去长串中判断是否包含,如果包含,已经找到
*/
class StringGetEqual
{
public static void main(String[] args)
{
String str = "84jielaWkwUc56VFDk34l9LK0jWjiad";
String str2 = "jl2Riv6Uc56VFDksdf3kh";
sop("最大相同字符串: "+getEqualSub(str,str2));
}
public static String getEqualSub(String str,String str2)
{
String max="",min="";
max=(str.length()>str2.length())?str:str2;//判断哪个是长串,哪个是短串
min=(max==str)?str2:str;
sop("max= "+max+"...min= "+min);
for (int x=0;x<min.length();x++)
{
for (int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
{
String temp=min.substring(y,z);
//sop("字符串: "+temp);
if (max.contains(temp))
return temp;
}
}
return "";
}
public static void sop(String str)
{
System.out.println(str);
}
}
StringBuffer字符串缓冲区
StringBuffer是一个容器,其特点是:1.长度是可变化的。
2.可以直接操作多个数据类型。3.最终会通过toString方法变成字符串。
StringBuffer的部分方法
1.存储
①StringBuffer append(数据);//将指定数据作为参数添加到已有数据结尾处
②StringBuffer insert(int index,数据);//可以将数据插入到指定index位置
2.删除
①StringBuffer delete(int start,int end);//删除缓冲区中的数据,包含start,
不包含end.
②StringBuffer deleteCharAt(int index);//删除指定位置的字符
3.获取
①char charAt(int index);//返回此序列中指定索引处的 char 值
②int indexOf(String str);//返回第一次出现的指定子字符串在该字符串中的位置。
③int lastIndexOf(String str);//返回最右边出现的指定子字符串在此字符串中的位置。
④int length();//返回长度(字符数)。
⑤String subString(int start,int end);//返回一个新的 String,包含start,不包含end。
4.修改
①StringBuffer replace(int start,int end,String str);//使用给定 String 中的字符
替换此序列的子字符串中的字符。
②void setCharAt(int index,char ch);//将给定位置处的字符设置为 ch。
5.反转
StringBuffer reverse();// 将此字符序列用其反转形式取代。
6.将缓冲区中指定数据存储到指定字符数组中
vod getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin);//将字符从此
序列复制到目标字符数组 dst。
例:
/*StringBuffer_存储,删除,获取,修改,反转*/
class StringBufferTest
{
public static void main(String[] args)
{
StringBuffer sb = new StringBuffer();
//增加 sop:abcdef
sb.append("abcdef");
sop("sb= "+sb);
//插入 sop:abcHELLOdef
sb.insert(3,"HELLO");
sop("sb= "+sb);
//删除 sop:abcdef
sb.delete(3,8);//包含头,不包含尾
sop("sb= "+sb);
sb.deleteCharAt(2);//sop:abdef
sop("sb= "+sb);
//获取
char ch = sb.charAt(3);//sop:e
sop("ch= "+ch);
String str = sb.substring(0,sb.length());//sop:abdef
sop("str= "+str);
sop("index= "+sb.indexOf("e"));//sop:3
sb.deleteCharAt(3);
//修改
sb.replace(0,3,"JAVA");//sop:JAVAf
sop("sb= "+sb);
sb.setCharAt(sb.length()-1,'A');
sop("sb= "+sb);//sop:JAVAA
//反转
sb.reverse();//sop:AAVAJ
sop("sb= "+sb);
//将缓冲区中指定字符存储到指定字符数组中
char[] arr = new char[5];
sb.getChars(0,5,arr,0);
for (int x= 0;x<arr.length;x++)
{
sop("arr["+x+"]= "+arr[x]);
}
}
public static void sop(String str)
{
System.out.println(str);
}
}
StringBuilder
JDK1.5版本之后出现了StringBuilder.
StringBuffer和StringBuilder的区别:
StringBuffer是线程同步的。
StringBuilder是线程不同步的。
基本数据类型对象包装类
字节型 byte Byte 短整型 short Short
整型 int Integer 长整型 long Long
布尔型 boolean Boolean 单精度 float Float
双精度 double Double 字符型 char Character
基本数据类型对象包装类最常见的作用就是用于基本数据类型和字符串之间做转换
基本数据类型.toString(基本数据类型值);//基本数据类型转换成字符串
如:Integer.toString(34);//将整型34变成"34".
字符串转换成基本数据类型
xxx a = Xxx.parseXxx(String str);
例 int i = Integer.parseInt("128");
double d = Double.parseDouble("12.35");
boolean b = Boolean.parseBoolean("true");
十进制转成其它进制
toBinaryString();//二进制
toHexString();//十六进制
toOctalString();//八进制
其它进制转成十进制
parseInt(String,radix);//parseInt("110",2);
JDK1.5版本以后出现的新特性
Integer x = 4;//自动装箱,等价于 new Integer(4);
x= x+2;//x.intValue()。进行自动拆箱,变成int类型。和2进行加法运算,再将和
进行装箱赋给x。
}//Java语言_String类部分结束,有错误请大家指正,谢谢。