黑马程序员String知识

在写Socket通讯的时候发现自己的有关String操作的只是不是很扎实,所以收集一些知识。

=======一、

http://edu.csdn.net/heima android培训 http://edu.csdn.net/heima ; java培训期待与您交流!

一、String对象

1String类的特点:

ajava语言中用于描述的最常见的字符串数据的对象。

b、字符串数据都是一个对象。

    c、字符串数据一旦初始化就不可以被改变了。

    d、字符串对象都存储在常量池中,字符串常量池。

2、创建字符串对象的两种方式(建议不要用new的方式来创建对象)

    String s1 = "abcd";//这是在常量池中创建了一个字符串对象。

    String s1 = new String("abcd");//先在常量池中创建一个对象,然后在堆内存中备份一份。

3、比较

    ==:基本数据类型比较。

    equals:对象比较。

4String对象中的方法。

    其中构造方法有很多。

     int length(): 获取字符串长度。

     int indexOf(int ch): 获取指定字符的位置。

     int indexOf(String str):返回指定字符串的位置。

     char charAt(int index:  返回指定索引处的 char值。

     String substring(int beginIndex, int endIndex):返回一个新字符串,它是此字符串的一个子字符串。

     String substring(int beginIndex):返回一个新的字符串,它是此字符串的一个子字符串。

     char[] toCharArray(): 将此字符串转换为一个新的字符数组。

     String toUpperCase() : 将字符串转成大写。

     String toLowerCase() : 将字符串中所有转成小写。

     static String valueOf(all) : 返回参数的字符串表示形式。

     String toString():返回此对象本身。

     int lastIndexOf(int ch):  返回指定字符在此字符串中最后一次出现处的索引。

     isEmpty() : 字符串长度为0时,返回true

     byte[] getBytes():将字符串转成字符数组。

二、StringBuffer字符串缓冲区。

1、特点:

a、缓冲区就是用来缓存数据的,意味着它是一个容器。

b  、该容器的长度是可变的。

c、提供了对容器中内容的操作方法。(四种:增删改查)

d、该缓冲区中可以添加多种类型的元素,基本类型和应用类型。

e、想要使用容器中的数据,必须使用toStirng方法返回字符串。

2、常用方法:需要查阅构造方法。

append()追加,返回的还是容器,可以连续添加。

toString() 返回的是一个字符串。

insert()在任意位置添加。

delete()删除指定。

delete(0,sb.length)清空缓冲区。

sb.replace()修改。

setCharAt()

reverse()将字符串倒过来打印。

 

注意:通常情况下容器的底层都封装了数组是可变长度数组。

三、StringBuilder容器。

1StringBuilder概述:

ajdk1.5版本才出现的。

b、功能和StringBuilder容器一模一样。

2SringBufferStringBuidler区别。

aStringBuidler不用判断同步锁,是线程不安全的,但效率高。

StringBuffer是线程安全的。

b、对容器而言,被多线程操作,容易出现安全问题。

因为一个线程负责添加,一个负责删除,因为线程随机性会出现安全问题。

每调用一次操作容器的方法,都会判断一次锁,所以效率比较低。

3StringBuffer和数组容器的区别?

       a、数组容器是固定长度的,容器是可变长度的。

       b、数组容器一旦初始化就明确了元素类型。

            StringBuffer可存储任意类型,包括基本,引用。

       c、数组存储完元素可以通过角标来操作元素。

            StringBuffer存储完元素,都会变成字符串,只能用字符串的方法来操作。

4、什么时候使用字符串缓冲区?

         数据个数和类型可以是固定,也可以是不固定的。

         只要最终这些数据都需要变成字符串来操作,就可以用字符串缓冲区。



                                                                    +++++++++++++++++++++++++二、


                              看api的步骤:

1、看类的说明。其所属的包以及出现的版本。

2、看其构造函数。

3、看普通的方法。看时注意参数,和返回值类型。

 

                              Object

1 private static native void registerNatives ();

见到本地关键字修饰的方法,这个方法的源代码,不是Java语言编写,C++写的

 调用本地操作系统功能

 

2 public boolean equals(Object obj){  return this == obj ;}

  没有覆盖前,比较对象的地址。

  覆盖equals方法,建立对象自己的比较方法,比较对象中的成员变量的值

覆盖equals方法:

复制代码
 1 public boolean equals(Object obj){
 2 if(this==obj)
 3 
 4 return true;
 5 
 6 if(obj==null)
 7 
 8 return false;
 9 
10 if(obj instanceof People){
11 
12 People p=(People)obj;//People是自定义的类
13 
14 return this.name.equals(p.name)&&this.age==p.age;
15 
16 }
17 
18 return  true;
19 
20 }
复制代码

 

 

  

  toString

  返回一个字符串,方法的意义,返回对象的字符串表现形式

  没有覆盖之前 类名+@十六进制

  覆盖toString方法,返回自定义的对象的字符串表现形式

  返回对象中的成员变量的值

  例如:public String toString(){

return “Person”+this.name”+”...”+this.age;

}

 

                                与字符串有关的类

1String

String类的对象是不可以改变的,但是该对象的引用却可以改变。

2、字符串的常见方法

判断:

判断两个字符串的内容是否相等 boolean equals(Object obj)

判断是否以某个字符串开头 boolean startWith(String str)

判断是否包含指定的字符串boolean contains(String str)

获取:

获取指定位置上的单个字符  char chatAt(int index)

获取指定字符在字符串中第一次出现的下标 int indexOf(char ch)

获取指定字符在字符串中第一次出现的下标 int indexOf(char ch,int fromindex)

获取指定字符串在字符串中第一次出现的下标 int indexOf(String s)

获取指定字符串在字符串中第一次出现的下标 int indexOf(String s, ,int fromindex)

获取字符串的一部分 返回新的String  substring(int start,int end)包含头,不包含尾

获取字符串的一部分 返回新的String  substring(int start)包含头,后面的全要

获取字符串中字符的个数 int length()   

转换:

字符串转成字节数组  byte[]  getBytes()

字符串转成字符数组  char[]  toCharArray()

字符串转成大写字母  String  toUpperCase()

字符串转成小写字母  String  toLowerCase()

将其他数据类型转成字符串  static String valueOf() 

其他方法:

切割字符串,返回字符串数组 String[] split()

替换字符串,返回新的字符串 String replace()

去掉字符串两端的空格,返回新的字符串 String trim()

比较字符串谁大谁小 按照字典顺序比较int compareTo(String s) 

 

3、StringBuffer类和StringBuilder常见方法

  将数组追加到缓冲区StringBuffer append()\\在原有的常量池上追加

删除缓冲区中的数据StringBuffer delete()

在指定的位置上插入数据StringBuffer insert()

修改指定位置上的单个字符void  setCharAt()

将缓冲区变成字符串,可以使用String类方法String toString()

注意:StringBuilder的功能和StringBuffer一模一样。前者是JDK5以后出现的。

4StringStringBuffer的区别?

String的长度固定。

StringBuffer的长度可变。

   StringBufferStringBuilder的区别?

StringBuffer的线程安全,效率低。

StringBuilder的线程不安去,效率高

5、String类的面试题

A:字符串一旦被赋值就不能被改动。

注意:这里的改动指的是字符串的内容,而不是字符串对象的引用。

B:String s = new String("hello");String s = "hello";有区别吗?是什么呢?

有。前者创建了两个对象。后者创建了一个对象。

C:看程序,写结果

复制代码
 1 String s1 = new String("hello");
 2 
 3 String s2 = new String("hello");
 4 
 5 System.out.println(s1==s2);\\false
 6 
 7 System.out.println(s1.equals(s2));\\true
 8 
 9  
10 
11 String s3 = new String("hello");
12 
13 String s4 = "hello";
14 
15 System.out.println(s3==s4);\\false
16 
17 System.out.println(s3.equals(s4));\\true
18 
19  
20 
21 String s5 = "hello";
22 
23 String s6 = "hello";
24 
25 System.out.println(s5==s6);\\true
26 
27 System.out.println(s5.equals(s6));\\true
28 
29 D:看程序,写结果
30 
31 String s7 = "hello";
32 
33 String s8 = "world";
34 
35 String s9 = "helloworld";
36 
37 System.out.println(s9==s7+s8);\\false
38 
39 System.out.println(s9=="hello"+"world");\\true
复制代码

 

 

总结:变量就直接造,常量先找,如果有就使用,否则就造。

 

 

                              Integer

 

1、常见方法:(也是将字符串转换成转换成基本数据类型的)

static int parseInt(String s)将数字格式的字符串转成基本数据类型

Integer(String s)构造方法将数字格式的字符串,包装成Integer类型对象

intvalue()将构造方法中包装的字符串,转成基本数据类型

2自动装箱和拆箱,1.5版本后的新特性

    装箱:将基本数据类型封装成对象 Integer xx = 10;

  拆箱:将封装成对象的基本数据类型,转成基本数据类型  xx+1

3Integer类要注意的问题

Integer a=100;

Integer b=100;

System.out.println(a==b);\\true

虽然“==”比较的还是地址,但是如果如果所赋的值不超过byte 的范围就会直接令b=a, 不会开辟新空间。

 

 

                                  Random

 

1、两个构造

Random(); Random(long seed);

Seed(种子)不同,产生的随机数就不同

2、常用方法

nextInt(int n)

产生[0,n]之间的int

 

 

                                 Scanner

1Scanner的构造格式:

Scanner sc = new Scanner(System.in);

2next()nextLine()的区别

next()只会扫描有效字符,在扫描到结束符如(空格键、Tab键和Enter键)时结束,所 以next()扫描到的字符串前后不会包含空格键、Tab键和Enter键。

nextLine()扫描行分隔符(Enter)之前的所有字符,所以会包含空格。

                                对日期/时间有关类的总结

1、有关的类:

Date类、Dateformat类、SimpleDateFormatCalendar

2Date中常用的方法:

毫秒值--->日期对象:

Date类的构造函数:Date(long date)

Date类中void setTime(long time)

日期对象---->毫秒值

Date类中long getTime():

System类中static long currentTimeMills();获取当前日期毫秒值。

3、Dateformate类是抽象类,所以只能通过子类对象来实现其中的方法。

使用静态方法,类名调用 getDateInstance()返回DateFormat类的子类对象 

DateFormat df = DateFormat.getDateInstance();//返回的是SimpleDateFormat对象

DateFormate df=new SimpleDateFormate();

DateFormate中有个将字符串转换为Date类对象的:

Date parse(String s);

4、Calendar类虽然是一个抽象类。但它比较特殊,是一个语言环境敏感类。它创建实例对象的方法如下:

Calendar c=Calendar.getInstance();

Calendar中常用的方法:

add(int field,int amount):为给定的日历字段增加或减去指定的偏移量。

int get(int field):返回指定字段的值

void set(int year,int month,int day)

void setTime(Date d);用指定的Date设置Calendar的时间

计算机中的月份是0-11,星期天、一...六对应06

5、以下是两个面试题,通过对Date类、DateFormat类和Calendar类的运用,掌握如何使用API

复制代码
  1 /*
  2 
  3  * 计算保质期,计算闰年的
  4 
  5  */
  6 
  7 import java.text.DateFormat;
  8 
  9 import java.util.*;
 10 
 11 public class CalendarDemo {
 12 
 13 public static void main(String[] args) throws Exception{
 14 
 15 //调用静态方法getIntance()获取日历对象的子类对象
 16 
 17 //Calendar c = Calendar.getInstance();
 18 
 19 //printCalendar(c);
 20 
 21 baoZhi();
 22 
 23 runNian();
 24 
 25 }
 26 
 27  
 28 
 29 //定义方法,实现闰年的计算
 30 
 31 private static void runNian(){
 32 
 33 /*
 34 
 35  * 计算闰年,2月的最后一天是什么,如果是28平年,29闰年
 36 
 37  * 获取日历对象getInstance
 38 
 39  * 已知年份
 40 
 41  * 将日历设置到这一年的3月1日
 42 
 43  * 向前偏移1天,获取天数判断
 44 
 45  */
 46 
 47 Calendar c = Calendar.getInstance();
 48 
 49 c.set(2002, 2, 1);
 50 
 51 c.add(Calendar.DAY_OF_MONTH, -1);
 52 
 53 if(c.get(Calendar.DAY_OF_MONTH)==29)
 54 
 55 System.out.println("闰年");
 56 
 57 else
 58 
 59 System.out.println("平年");
 60 
 61 }
 62 
 63  
 64 
 65 //定义方法,实现保质期的计算
 66 
 67 private static void baoZhi()throws Exception{
 68 
 69 /*生产日期是2014-3-10,保质期是187天,那一天到期
 70 
 71  * 获取日历获取对象--操作系统走
 72 
 73  * set方法,将日历设置到生产日期上
 74 
 75  * 调用add方法,让天数,偏移187天,输出日历
 76 
 77  */
 78 
 79 //     第一种:输入一个日期字符串
 80 
 81 String date = "2014-3-10";
 82 
 83 DateFormat df = DateFormat.getDateInstance();
 84 
 85 Date d = df.parse(date);
 86 
 87 Calendar c = Calendar.getInstance();
 88 
 89 //     第二种直接设置日历中的各字段
 90 
 91 //     此时要将月份7就表示8月
 92 
 93 //     c.set(2014, 2,10);
 94 
 95 c.setTime(d);
 96 
 97 c.add(Calendar.DAY_OF_MONTH, 187);
 98 
 99 printCalendar(c);
100 
101 }
102 
103  
104 
105 //打印当前日历对象的信息
106 
107 private static void printCalendar(Calendar c){
108 
109 System.out.println(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"+
110 
111 c.get(Calendar.DAY_OF_MONTH)+"日 星期"+(c.get(Calendar.DAY_OF_WEEK)-1));
112 
113 }
114 
115 }
复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值