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

黑马程序员__String类问题总结

2015-04-01 00:39 239 查看

------Java培训期待与您交流! -------

char类型只能表示单个字符,而由多个字符连接而成的称为字符串。通常Java中使用java.long.String来创建字符串对象

构建字符串对象
String str;              //默认为null
public String(char arr[])//创建数组
char a[]={'g','o','o','d'};
String s=new String(a);//=>等同于  String s=new String("good")
String s="good";


------------------------------------------
字符串特性:
1.字符串最大特点:一旦被初始化就不可以改变
可以修改地址值的指引,但是内容是不会改变的
String s="abc"; s="kk";
s的地址指引改变了,内容是不变的
---------
2.String类复写了Object类的equals方法
Object.equals()是比较地址值是否相同
String.equals()复写后,比较内容是否相同
String s1="abc";
String s2=new String("abc");
String s3="abc";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println(s1==s3);


3. s1和s2有什么区别
s1在内存中有一个对象
s2在内存中含有两个对象

4.s1和s3的地址值是相同的,s1和s2是不同的
因为首先String会开辟一个Sting常量池,然后如果有相同的值时,会指引同一个地址值
如果new Stirng("abc"),那么会新建一个Stirng的对象,放入abc,地址就不用了

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

StringBuilder是一个可动态变量,可以 自适应大小自调节占用的内存数,适用于需要频繁附加字符的时候使用。

StringBuilder builder=new StringBuilder(x); x为String类型

append()方法,在原有字符后边添加字符
insert(int offset,arg)方法,指定下标,添加内容
delete(int start,int end) 方法。指定指标位置删除,如果不存在位置,那么会从最头或者最尾。
reverse()反转字符串

-----------
public static void main(String[] args){
String str="";
long startTime=System.currentTimeMillis();
for (int i=0;i<10000;i++){
str=str+i;
}
long endTime=System.currentTimeMillis();
long midTime=endTime-startTime;
System.out.println(midTime+"ms");
StringBuilder builder=new StringBuilder("");
startTime=System.currentTimeMillis();
for (int i=0;i<10000;i++){
builder.append(i);
}
endTime=System.currentTimeMillis();
midTime=endTime-startTime;
System.out.println(midTime+"ms");
}
以上是用String和StringBuilder的扩展时间
发现,StringBuilder扩展空间时速度更快,而且不会占用多余的块,而String需要重复新建空间,连接旧的空间,耗时时间更长

------------------
以下是用数组和转型的实例:
1.数组一般是比较固定的,不要修改数组的元素,需要修改的话,可以新建Stirng变量进行存储数组值
2.转型
string-->char[]
char[i]-->string
char[i]-->int
int-->char[i]

/**编程实现对键盘输入的英文名句子进行加密。用加密方法为:当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其它字符时不变。
*比如245a95n加密后是245bcd95opq。
*/
public static void main(String[] args) {
String str="245a95y";
String tmp1="";
char[] cha1=str.toCharArray();
System.out.println(str);
//System.out.println((int)'a'+"\t"+(int)'z');
for (int i=0;i<cha1.length;i++){
int tmp=(int)cha1[i];
if (97<= tmp && tmp<=119){
tmp1+=(char)(tmp+1);
tmp1+=(char)(tmp+2);
tmp1+=(char)(tmp+3);
}else if (tmp>119 && tmp<=122){
tmp1+=(char)(tmp-32);
tmp1+=(char)(tmp-32-1);
tmp1+=(char)(tmp-32-2);
}else{
tmp1+=cha1[i];
}
}
System.out.println(tmp1);
}
-----------------------------------------
-------------------------------------------------------
String.format(Local local,String format,Object...args)

Date dae =new Date();
String day=String.format("%te",date);

常见的日期时间转换符。(太多写下基本的,其余的查阅吧)
$tY年
%tm
%tD
%tH
%tM
$tS

常见组合
%tF2014-01-01
%tD01/01/14
%tc周二 一月 1 00:00:00 CST 2014
%tr00:00:00 下午
%tT00:00:00
%tR00:00

常见日期格式化转换符
转换符 说  明 示  例
%te 一个月中的某一天(1~31) 2
%tb 指定语言环境的月份简称 Feb(英文)、二月(中文)
%tB 指定语言环境的月份全称 February(英文)、二月(中文)
%tA 指定语言环境的星期几全称 Monday(英文)、星期一(中文)
%ta 指定语言环境的星期几简称 Mon(英文)、星期一(中文)
%tc 包括全部日期和时间信息 星期四 十一月 26 10:26:30 CST 2009
%tY 4位年份 2009
%tj 一年中的第几天(001~366) 085
%tm 月份 03
%td 一个月中的第几天(01~31) 08
%ty 2位年份 09

时间格式化转换符
转换符 说  明 示  例
%tH 2位数字的24小时制的小时(00~23) 14
%tI 2位数字的12小时制的小时(01~12) 05
%tk 2位数字的24小时制的小时(1~23) 5
%tl 2位数字的12小时制的小时(1~12) 10
%tM 2位数字的分钟(00~59) 05
%tS 2位数字的秒数(00~60) 12
%tL 3位数字的毫秒数(000~999) 920
%tN 9位数字的微秒数(000000000~999999999) 062000000000
%tp 指定语言环境下上午或下午标记 下午(中文)、pm(英文)
%tz 相对于GMT RFC 82格式的数字时区偏移量 +0800
%tZ 时区缩写形式的字符串 CST
%ts 1970-01-01 00:00:00至现在经过的秒数 1206426646
%tQ 1970-01-01 00:00:00至现在经过的毫秒数 1206426737453

常见的日期时间组合转换符
转换符 说  明 示  例
%tF “年-月-日”格式(4位年份) 2009-01-26
%tD “月/日/年”格式(2位年份) 03/25/09
%tr “时:分:秒 PM(AM)”格式(12小时制) 03:22:06 下午
%tT “时:分:秒”格式(24小时制) 15:23:50
%tR “时:分”格式(24小时制) 15:23

----------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: