1 JAVA SE y( T9 J/ e0 q* U! Z, D6 M1 W
1.1 深入JAVA API
, i' _; S4 ~) F2 X( z9 B 1.1.1 Lang包
/ L% B7 W2 ~& C 1.1.1.1 String类和StringBuffer类' i" X) |$ @5 E
位于java.lang包中,这个包中的类使用时不用导入$ n: \; N; }- h6 S, o" _. D
String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成string字符串。
, ?3 m4 K' S# l/ O0 V; B! D' g String x=”a”+4+”c”编译时等效于String x=new StringBuffer().append(“a”).append(4).append(“c”).toString();% Z6 o" U( a+ ]6 ~/ k! X7 _
字符串常量是一种特殊的匿名对象,String s1=”hello”;String s2=”hello”;则s1==s2;因为他们指向同一个匿名对象。
0 f, R; j. D5 A' G6 F& t" G1 u 如果String s1=new String(“hello”);String s2=new String(“hello”);则s1!=s2;" ~' @& U4 X4 k; m) ^
/*逐行读取键盘输入,直到输入为“bye”时,结束程序
+ U9 M7 p7 V! c* N 注:对于回车换行,在windows下面,有'\r'和'\n'两个,而unix下面只有'\n',但是写程序的时候都要把他区分开*/, q- S0 X9 S5 u/ G
public class readline
5 E+ T, f( K( X- }# F$ ]9 h8 E6 c {
* g+ U9 g M0 p/ i public static void main(String args[])" E/ }% t4 r2 t& k4 [0 v" R z
{
; U8 }0 n+ s9 _ X2 L String strInfo=null;) e! w( V1 Q; ^0 _ f8 H# t& h
int pos=0;
+ ~, u. {# a# N7 h2 z" r( m" } byte[] buf=new byte[1024];//定义一个数组,存放换行前的各个字符9 l! h, S# [. F) o6 I1 l( c/ q
int ch=0; //存放读入的字符
' d X( t, C3 k! Y system.out.println(“Please input a string:”);( e( q) L$ [% C& I o( D
while(true)% t# H' u! A! W) J5 n8 C7 Z
{
1 l# |4 @9 W2 |. q+ g try
2 q+ o M8 b9 X( i. e2 I; _/ e {6 x$ h, ?, s) I2 J
ch=System.in.read(); //该方法每次读入一个字节的内容到ch变量中。, G' Z9 G) i, R: Q
}( X% m+ p% n3 W5 c* L
catch(Exception e)
% l; A" Q' n' t# l4 O$ i+ n {$ h' r& V) ?, z/ m U# U
}7 J9 j: c+ O" {8 ]' m
switch(ch)+ U2 N) S' B* z1 V6 e, a& I" U
{
9 Y/ |/ N, c$ r$ e: m2 z; k case '\r': //回车时,不进行处理1 ~" Y7 B, a6 Y
break;
3 b+ P# n5 G+ \. D, \& n) t+ K; l case '\n': //换行时,将数组总的内容放进字符串中1 a& O& S4 A0 ]0 c
strInfo=new String(buf,0,pos); //该方法将数组中从第0个开始,到第pos个结束存入字符串。
, X4 w4 g* i3 D `+ g0 ~ if(strInfo.equals("bye")) //如果该字符串内容为bye,则退出程序。
( [2 c; E' V, m2 Z' a0 Q5 c {3 t9 u' l" o% ?' N" \: e% n- h
return;
4 N1 D+ K- p) f5 k }
) Q7 G: b; ]& L4 T* C else //如果不为bye,则输出,并且竟pos置为0,准备下次存入。
& X6 h! A5 w( K2 @7 B {4 d% ?% z& u0 z' G+ y
System.out.println(strInfo);
, k/ }/ ?6 y& I, T pos=0;2 ^1 Q2 V/ I$ h. @% G) E! d! W
break;1 q9 ]! y' @4 r0 @
}
* Y- x5 a" h: f default:
: Z: u6 Y" n* {2 n buf[pos++]=(byte)ch; //如果不是回车,换行,则将读取的数据存入数组中。
) Q1 ^$ m# d3 X: Z }
/ t( l( \, H4 `4 Y5 @" o8 o( x a+ U4 t }
! U2 i( n0 G& t, e }* f7 H% X8 q. |& @1 ^
}
6 @/ L# O' G [ String类的常用成员方法) z: D8 A; f5 y2 b
1、 构造方法:
$ X0 S7 F0 U; j1 {/ |! q8 e String(byte[] byte,int offset,int length);这个在上面已经用到。
8 Q* Z* _, g' c' q# ^1 ~: Z 2、 equalsIgnoreCase:忽略大小写的比较,上例中如果您输入的是BYE,则不会退出,因为大小写不同,但是如果使用这个方法,则会退出。9 i$ Z* d8 N9 O( q0 U$ U
3、 indexOf(int ch);返回字符ch在字符串中首次出现的位置
9 f& t6 ]$ C% {2 H% v 4、 substring(int benginIndex);
; b" G% \2 C/ P 5、 substring(int beginIndex,int endIndex);
2 ]* x( `4 }* {) o, W5 O; E% }) s 返回字符串的子字符串,4返回从benginindex位置开始到结束的子字符串,5返回beginindex和endindex-1之间的子字符串。
( x& G! }7 r. r* l! ? 基本数据类型包装类的作用是:将基本的数据类型包装成对象。因为有些方法不可以直接处理基本数据类型,只能处理对象,例如vector的add方法,参数就只能是对象。这时就需要使用他们的包装类将他们包装成对象。
9 W' e! ]# j! W; c& C 例:在屏幕上打印出一个*组成的矩形,矩形的宽度和高度通过启动程序时传递给main()方法的参数指定。
. q$ v, l! M! R9 w public class testInteger/ \$ K! b# h( k! `8 a. U' o
{: |" X, `5 h5 g: J1 T
public static void main(String[] args) Y( U. X/ G1 M* @8 f T5 ?
//main()的参数是string类型的数组,用来做为长,宽时,要转换成整型。5 U. F: v8 _: L* t: U. m# L6 p# O
{1 o9 U8 ?2 x% \, ]
int w=new Integer(args[0]).intValue();$ C, X4 v( D" V, y' U/ d) e
int h=Integer.parseInt(args[1]);
+ e U% [# p- P1 z4 `/ P: R0 W+ } //int h=Integer.valueOf(args[1]).intValue();) P6 W0 |. K* j9 K' m9 ]
//以上为三种将字符串转换成整形的方法。5 } z' y7 z; e1 `6 [& m# X) p
: s2 f8 h+ T- Z0 U0 a) F for(int i=0;i |