1.'=='、'.equals'和'contains'的区别:java
值类型是存储在内存中的栈,而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而类型变量自己则存储在堆中。数组
==操做比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同(是否引用的同一个东西,故也许两个字符串表时内容相同,但存储在不一样位置,仍会报False),即栈中的内容是否相同。app
equals操做表示的两个变量是不是对同一个对象的引用,即堆中的内容是否相同。this
contains操做表示当前字符串是否含有参数指定的字符串编码
==比较的是2个对象的地址,而equals比较的是2个对象的内容,contains当字符串a与字符串b相等时,仍返回True。spa
显然,当equals为true时,==不必定为true;对象
例子:blog
public class Example{
public static void main(String args[ ]){
String s1,s2;
s1=new String("we are students");
s2=new String("we are students");
System.out.print(s1.equals(s2)+" ");
System.out.println(s1==s2);
String s3,s4;
s3="how are you";
s4="how are you";
System.out.print(s3.equals(s4)+" ");
System.out.println(s3==s4);
System.out.print(s1.contains(s3)+" ");
System.out.println(s2.contains("we are students"));
}
}
结果:内存
True Falseci
True True
False True
2.String类的经常使用方法
1)先后缀:public boolean startsWith(String s)
public boolean endsWith(String s) 判断当前字符串的先后缀是否与指定字符串s相等。
2)字典序比较:
public int compareTo(String s) 按字典序与当前指定的字符串比较大小。
3)子串的检索:
public int indexOf (String s) 从当前字符串的头开始检索字符串s,并返回首次出现s的位置,若没有检索到字符串s,返回值为-1。
indexOf(String s ,int startpoint) 从startpoint位置开始检索字符串s,并返回首次出现s的位置,若没有检索到字符串s,返回值为-1。
lastIndexOf (String s) 从当前字符串的头开始检索字符串s,并返回最后一次出现s的位置,若没有检索到字符串s,返回值为-1.
4)字符串的截取:
public String substring(int startpoint) 从startpoint位置开始截取到字符串的最后一个位置,并返回所得的字符串。
substring(int start ,int end) 从start处开始截取,到end处中止,但end处字符不包含在其中,即只有(end-start)个字符。
5)字符串去空格:
public String trim():去掉字符串的先后空格。
3.字符串与基本数据类型的转换(java.lang包)
1)字符串转数字:
public int static parseInt(String s):将数字类型字符串s转换为int型数据。
public byte static parseByte(String s);
public short static parseShort(String s);
public long static parseLong(String s);
public double static parseDouble(String s);
2)整数的进制表示(返回字符串):
public static String toBinaryString(long i) 整数i的二进制表示;
public static String toOctalString(long i) 十进制;
public static String toHexString(long i) 十六进制;
public static String toString(long i,int p) 整数i的p进制表示;
3)数字的字符串表示:
public String valueOf(byte n)
public String valueOf(int n)
public String valueOf(long n)
public String valueOf(float n)
public String valueOf(double n)
4.对象的字符串表示
全部的类都默认是java.lang包中Object类的子类或间接子类。Object类有一个public方法public String toString(),一个对象经过调用该方法能够得到该对象的字符串表示 。
一个类能够经过重写该方法,以便得到该对象想要的字符串表示。(java.util包中的Date类就经过重写该方法使得Date对象调用toString()获得的字符串是由日期信息组成的字符序列。
若一个类没有重写该方法,则该类所建立的对象调用该方法获得的字符串格式为:
类名@对象的引用。
例:
import java.util.Date;
public class Example{
public static void main(String args[ ]){
Date date=new Date();
Student stu=new Student("张三",89);
TV tv=new TV("电视机",8776);
System.out.println(date.toString());
System.out.println(stu.toString());
System.out.println(tv.toString());
}
}
class Student{
String name;
double score;
Student(String name,double score){
this.name=name;
this.score=score;
}
public String toString(){
return "姓名:"+name+",分数:"+score;
}
}
class TV{
String name;
double price;
TV(String name,double price){
this.name=name;
this.price=price;
}
}
输出结果为:
5.字符串与字符数组、字节数组
1):字符串与字符数组
类的构造方法String(char[])和String(char[],int offset,int length)分别用数组a中的所有字符和部分字符建立字符串对象。
String类也提供了将字符串存放到数组中的方法:
public void getChars(int start,int end,char c[],int offset)
字符串调用getChars()方法将当前字符串中的一部分字符复制到参数c指定的数组中,将字符串从位置start到end-1位置上的字符复制的数组c中,并从数组c的offset处开始存放这些字符。
String类还提供了一个方法 public char[] to CharArray()
字符串对象调用该方法能够初始化一个字符数组,改庶族的长度与字符串的长度相等,并将字符串对象的所有字符复制到该数组中。
2):字符串与字节数组
String类的构造方法String(byte[])用指定的字节数组构造一个字符串对象。构造方法String(byte[],int offset,int length)用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。方法public byte[] getBytes()使用平台默认的字符编码,将当前字符串转化为一个字节数组。
例:
public class Example{
public static void main(String args[ ]){
byte d[]="YOUIHE你我他".getBytes();
System.out.println("数组d的长度是(一个汉字占两个字节):"+d.length);
String s=new String(d,6,2);
System.out.println(s);
}
}
6.StringBuffer类
String类建立的字符串对象不能修改、删除或替换字符串中的某个字符,即String对象一旦建立,实体是不能再发生变化的。而StringBuffer类对象的实体的内存能够自动的改变大小,经过调用append()方法能够追加字符串序列。
1)构造方法:
StringBuffer():分配给该对象的实体的初始容量可容纳16个字符,且容量会自动增长。
StringBuffer(int size):指定初始长度,能够指定分配给该对象的实体的初始容量为size指定的字符个数,且容量会自动增长(至关于这里用size代替前者的“16”)。
StringBuffer(String s):用一个字符串指定初始长度 。
2)经常使用方法:
a.追加字符串:append()。
b.取单个字符:char charAt(int n)获得参数n指定的位置上的单个字符。
c.替换其中单个字符:void setCharAt(Int n,char ch)将当前StringBuffer对象实体中的字符串位置n处的字符用参数ch指定的字符替换。
d.插入字符串:StringBuffer insert(int index,String str)将一个字符串插入另外一个字符串中,并返回当前对象的引用。
e.删除子串:StringBuffer delete(int startIndex,int endIndex)从当前StringBuffer对象实体中的字符串中删除一个子字符串,并返回当前对象的引用。
f.字符串替换:StringBuffer replace(int startIndex,int endIndex,String str)将当前对象实体中的字符串的一个子字符串用参数str制定的字符串替换。
g.字符串反转:public StringBuffer reverse()将对象实体中的字符翻转,并返回当前对象的引用。
3)length与capacity的区别:
length返回当前引用实体的实际长度,capacity则返回当前StringBuffer的容量(即默认不断+16,16为预留空间,虽然没有存储东西,但在capacity中会算入容量,而在length中不算)。
7.StringTokenizer类
1)构造方法:
a.StringTokenizer(String s):为字符串s构造一个分析器,使用默认空格分隔标记。
b.StringTokenizer(String s,String delim):为字符串s构造一个分析器,参数delim中的字符的任意排列组合都是分隔标记。
例:用户输入浮点数,程序分别输出该书的整数部分和小数部分。
import java.util.*; public class Example{ public static void main(String args[ ]){ String []mess={"整数部分","小数部分"}; Scanner reader=new Scanner(System.in); double x=reader.nextDouble(); String s=String.valueOf(x); StringTokenizer fenxi=new StringTokenizer(s,"."); for(int i=0;fenxi.hasMoreTokens();i++){ String str=fenxi.nextToken();//将分隔符前的String赋给整数部分 System.out.println(mess[i]+":"+str); } } }