您的位置:首页 > 职场人生

黑马程序员_JavaAPI——String及常见API类总结

2013-04-28 10:27 681 查看
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

/*

基本数据类型对象包装类。

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);

int a = Integer.parseInt("123");

double b = Double.parseDouble("12.23");

boolean b = Boolean.parseBoolean("true");

Integer i = new Integer("123");

int num = i.intValue();

十进制转成其他进制。

toBinaryString();

toHexString();

toOctalString();

其他进制转成十进制。

parseInt(string,radix);

-----------------------------------------------------------------------------

/**
* Integer a = new Integer(100); Integer b = 100; Integer c =100; int d =
* 100; a、b、c、d这四个数通过“==”和equals方法,进行比较,都哪些结果是true,哪些是false
* a、b、c、d这四个数通过“==”和equals方法,进行比较,都哪些结果是true,哪些是false
*
* @author 张熙韬
*
*/
public class Problem1 {
public static void main(String[] args) {
Integer a = new Integer(100);
Integer a1 = new Integer(100);
Integer b = 100;// 相当于Integer b = Integer.valueOf(100);
Integer c = 100;// 相当于Integer c = Integer.valueOf(100);
int d = 100;

/*
* "equals"为true: equals方法接收的参数为Object类型,Java中有自动装箱功能,
* 当d为equals方法的参数时,d将被装箱为Integer类型,调用的是Integer.valueOf(100)方法,
* 在valueOf方法内部,将-128~127之间对应的Integer对象存到一个缓冲区中(数组中)。
* 那么a,b,c,d就都为Integer类型,且值都为100。所以这四个数无论哪个是调用者,哪个是参数,equals方法的结果都为true。
*/
System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(a.equals(d));
System.out.println(b.equals(c));
System.out.println(b.equals(d));
System.out.println(c.equals(d));
System.out.println("===========");
// int类型的数和Integer类型的对象相比较时,会先将Integer类型的对象拆箱成int类型。所以a==d,b==d,c==d。
System.out.println(a == d);
System.out.println(b == d);
System.out.println(c == d);
System.out.println("===========");
// 当b和c的值在-128~127之间且大小相等时,两者都指向数组中的同一个索引位置。所以b==c。
System.out.println(b == c);
System.out.println("===========");
// a在内存独立开辟了一块空间,b和c是自动装箱成Integer类型的,指向数组中同一个位置。所以a!=b,a!=c。
System.out.println(a == b);
System.out.println(a == c);
//独立开辟的内存地址不同
System.out.println(a==a1);
}

}


-----------------------------------------------------------------------------

String类:

字符串是一个特殊的对象。

字符串一旦初始化就不可以被改变。

String str = "abc";//"abc"存储在字符串常量池中。

池中没有就建立,池中有直接用。

String s1 = "abc";//在常量池中创建一个对象

String s2 = new String("abc");//在堆内存中创建两个对象,一个new一个,一个字符串对象。

System.out.println(s==s1);true

System.out.println(s==s2);false

System.out.println(s.equals(s2));true

String类覆写了Object中的equals方法建立了String类自己的判断对象是否相同的依据。

构造函数:

1.String s = new String();

2.byte[] arr = {97,66,67,68};

String S = new String(arr);

System.out.println("s="+S);//打印结果:s=aBCD

3.char[] arr = {'w','a','p','q,','x'};

String s = new String(arr);

System.out.println("s="s);//打印结果:s=wapqx

4.char[] arr ={w,a,p,q,x,n,n,n};

String s = new String(arr,2,3);//从2开始取3个。

System.out.println("s="s);//打印结果:s=pqxn

-----------------------------------------------------------------

String类:常见功能

1.获取

1.1获取字符串中字符的个数(长度)

int length();

1.2根据位置获取字符。

char charAt(int index);

1.3根据字符获取位置,返回第一次出现的位置。(必须会)

int indexOf(int ch);

int indexOf(int ch,int fromIndex);从指定位置开始索引,返回第一次出现的位置。

int indexOf(String str);

int indexOf(String str,int fromIndex);

int lastIndexOf(int ch);

int lastIndexOf(int ch,int fromIndex);

int lastIndexOf(String str);

int lastIndexOf(String str,int fromIndex);

1.4获取字符串中一部分字符串。也叫子串。

String substring(int beginIndex,int endIndex);

String substring(int beginIndex);

返回一个新的字符串,从指定的beginIndex开始,直到索引endIndex-1处结束。

包含begin不包含end

2.转换

2.1将字符换变成字符串数组。

String[] split(String regex);涉及到正则表达式。

例: String s = "张三,李四,王五";

String[] arr = s.split(",");

2.2将字符变成字符数组。

char[] toCharArray();

2.3将字符串变成字节数组。

byte[] getBytes();

2.4将字符串中的字母转成大小写。

String toUpperCase();

String toLowerCase();

2.5将字符串中的内容进行替换。

String replace(char oldChar,char newChar);

String replace(String s1,String s2);

2.6将字符串两端的空格去除。(开发中非常有用)

String trim();

2.7将字符串进行连接。

String concat(String);

System.out.println("abc".concat("kk"));

System.out.println("abc"+"kk");//等效

2.8

System.out.println(String.valueOf(4)+1);

System.out.println(""+4+1);//等效

3.判断

3.1两个字符串内容是否相同。

boolean equals(Object obj);

boolean equalsIgnoreCase(string str);//忽略大小写进行比较。

例:String s = "abc";

System.out.println(s.equals("ABC".toLowerCase()));

System.out.println(s.equalsIgnoreCase("ABC"));

3.2字符串中是否包含指定字符串。

boolean contains(string str);

3.3字符串是否以指定字符串开头,是否以指定字符串结尾。

boolean startsWith(string);

boolean endsWith(string);

4.比较: compareTo();

int compareTo(String anotherString)

System.out.println("a".compareTo("b"));//-1

System.out.println("a".compareTo("A"));//32

System.out.println("abc".compareTo("bcd"));//-1

5.intern();对字符串池进行操作的。(开发一般不用。)

String s1 = new String("abc");

String s2 = s1.intern();//池中有就使用,池中没有就建立。

System.out.println(s1==s2);//false

通过new创建不在常量池中。

--------------------------------------------------------------------------------------------------------------------

public class StringTestReview {
public static void main(String[] args){

String s="     sdfds      ";
System.out.println(s);
String ss=MyTrim(s);
System.out.println(ss);

//		String reverse=reverse(ss, 0, ss.length()-1);
//		System.out.println(reverse);

int count=getSubString2(ss, "s");
System.out.println(count);

String str1="asdfshellodsfsd";
String str2="afsdhellosss";

System.out.println(getMaxSubString(str1, str2));
}

/**
* 去首尾空格
* @param s
* @return
*/
public static String MyTrim(String s){
int start=0,end = s.length()-1;

while(s.charAt(start)==' '&&start<=end){
start++;
}

while(s.charAt(end)==' '&&start<=end){
end--;
}
s=s.substring(start,end+1);

return s;
}

/**
* 字符串反向
* @param s
* @param start
* @param end
* @return
*/
public static String reverse(String s,int start,int end){
char[] chs=s.toCharArray();

for(int i=start,j=end;i<=j;i++,j--){
char temp=chs[i];
chs[i]=chs[j];
chs[j]=temp;
}

return new String(chs,0,s.length());

}

/**
* 获取字符串在另一个字符串出现的次数
* @param args
*/
public static int getSubString(String s,String key){
int count=0;
int index=0;

while((index=s.indexOf(key))!=-1){
count++;
s=s.substring(index+key.length());
}
return count;
}

/**
* 获取字符串在另一个字符串出现的次数
* @param args
*/
public static int getSubString2(String s,String key){
int count=0;
int index=0;

while((index=s.indexOf(key,index))!=-1){
count++;
index=index+key.length();
}
return count;
}

/**
* 获得最大子串
* @param str1
* @param str2
* @return
*/
public static String getMaxSubString(String str1,String str2){
String max=null,min=null;

max=str1.length()>str2.length()?str1:str2;
min=(max==str1)?str2:str1;

for(int i=0;i<min.length();i++){
for(int j=0,z=min.length()-i;z!=min.length()+1;j++,z++){
String sub=min.substring(j,z);
if(max.contains(sub)){
return sub;
}
}
}
return null;
}
}
-------------------------------------------------------------------------------------------------------------------

StringBuffer:就是字符串缓冲区。

用于存储数据的容器。

特点:

1.长度可变。

2.可以存储不同类型数据。

3.最终要转成字符串进行使用 toString()方法。

4.可以对字符串进行修改。

既然是一个容器对象。应该具备什么功能呢?

1.添加:

StringBuffer append(data); short和byte不能添加,因为可以升级成int。

StringBuffer insert(index,data);//在指定位置添加,其他的顺延下去!

public static void method_add(){

StringBuffer sb=new StringBuffer();

StringBuffer sb2=sb.append("aaa").append(true).append(1222);

//饭盆理论

System.out.println(sb==sb2);//true

}

2.删除:

StringBuffer delete(start,end):包含头不包含尾。

StringBuffer deleteCharAt(int index):删除指定位置的元素。

清空缓冲区。缓冲区还在。

sb.delete(0,sb.length());

3.查找。

charAt(index);

int indexOf(string);

int lastIndexOf(string);

4.修改

StringBuffer replace(start,end,string);

void setCharAt(index,char);

增删改查;CURD create update read delete

设置长度:setLength(int);

反转:reverse();

StringBuffer--可变长度数组:

数组是固定长度的。

可变长度原理:会创建新数组,复制原数组内容到新数组。

-------------------------------------------------

StringBulider:JDK1.5之后出现,线程不同步,效率更高。

功能用法和StringBuffer一样。

Stringbufffer线程是同步的。通常用于多线程。

StringBulider线程不同步。通常用于单线程,他的出现提高效率。

--------------------------------------------------------------------------------

System类:

常见方法:

longcurrentTimeMillis();获取当前时间的毫秒值。

返回当前时间与协调世界时1970年1月1日午夜之间的时间差。

voidexit(int status);终止正在运行的Java虚拟机。

Properties getProperty();确定当前的系统属性。

存储的键和值都是字符串类型,所以没有指定泛型。

给系统设置一些属性,这些属性是全局的。

setProperties(String key,String value);调用Hashtable的方法put。

重点:获取系统中的回车符。

private static final String LINE_SEPARATOR = System.getProperty("line.separator");

public class SystemDemo {
Privatestatic final String LINE_SEPARATOR = System.getProperty("line.separator");
public static void main(String[] args) {
long l1 = 1355364853755l;
System.out.println(l1);//1355364853755
long l2 = System.currentTimeMillis();//获取当前时刻。
System.out.println(l2-l1);
Properties prop = System.getProperties();
Set<String> nameSet = prop.stringPropertyNames();
for(String name : nameSet){
String value = prop.getProperty(name);
System.out.println(name+":::"+value);
}
System.out.println("hello"+LINE_SEPARATOR+"world");
}
}


---------------------------------------------------------------------------------------------------------------------------

Runtime:没有构造方法摘要,说明该类不可以创建对象,

又发现还有非静态的方法。说明该类应该提供静态的返回该类对象的方法。

而且只有一个,说明Runtime类使用了单例设计模式的完成。

如果一个类没有提供构造函数,并且这个类具备着一般非静态方法,这个类至少有一个静态方法,返回本类对象。

public class RunTimeDemo {
public static void main(String[] args) throws IOException {
Runtime r = Runtime.getRuntime();
//execute:执行
Process p = r.exec("notepad.exe c:\\javaheima.txt");//使用指定程序,解析指定文件。
p.destroy();//杀掉进程
}
}
---------------------------------------------------------------------------------------------------------------------

Math类提供了操作数学运算的方法,都是静态的。

celi();返回大于参数的最小整数。double d1 = Math.ceil(12.56);

floor();返回小于参数的最大整数。double d2 = Math.floor(12.56);

round();返回四舍五入的整数。double d3 = Math.round(12.56);

max(int a,int b);返回int值中较大的一个。

pow(double a,double b);返回a的b次方。

random();返回介于0.0和1.0之间的double值。

double d = Math.ceil(Math.random()*10);

Random r = new Random();

for(int i = 0 ; i < 10; i++){

int d = r.nextInt(6)+1;

System.out.println(d);

}

---------------------------------------------------------------

long time = System.currentTimeMillis();

System.out.println(time);//1355392030148

Date date = new Date();//将当前日期和时间封装成Date对象

System.out.println(date);//Thu Dec 13 17:44:05 CST 2012

Date date2 = new Date(1355370753558l);//将指定毫秒值封装成Date对象。

System.out.println(date2);//Thu Dec 13 11:52:33 CST 2012

日期对象和毫秒值之间的转换:

毫秒值-->日期对象:

1.通过Date对象的构造方法new Date(time);

2.通过setTime设置。

可以通过Date对象的方法对该日期中的各个字段进行操作。

日期对象-->毫秒值:

1.getTime方法。

可以通过具体的数值进行运算。

boolean after(Date when);

boolean before(Date when);

compareTo(Date anotherDate);

对日期对象进行格式化。

将日期对象-->日期格式的字符串。

使用的是DateFormat类中的format方法。

例:

Date date = new Date();

//获取日期格式对象。具备着默认的风格。FULL LONG MEDIUM SHORT等可以指定风格。

DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);//不包含时间

dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);

//自定义风格。

dateFormat = new SimpleDateFormat("yyyy--MM--dd");

//使用DateFormat的format方法格式化日期对象,返回String类型

String str_date = dateFormat.format(date);

System.out.println(str_date);//2012--12--13

将日期格式的字符串-->日期对象。

使用的是DateFormat类中的

例:

String str_date = "2012---12---13";

DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);

dateFormat = new SimpleDateFormat("yyyy---MM---dd");

Date date = dateFormat.parse(str_date);

System.out.println(date);

---------------------------------------------------------------

Calendar:示例

public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(2013,2,27);
c.add(Calendar.YEAR, 2);//在年字段上偏移两年。
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;//月份从0开始
int day = c.get(Calendar.DAY_OF_MONTH);
String week =getweek(c.get(Calendar.DAY_OF_WEEK));
System.out.println(year+"年"+month+"月"+day+"日 "+week);
}
private static String getweek(int i) {
String[] week = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return week[i];
}
}


----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: