1 JAVA SE- o0 x: k$ H3 ]# M' A& m# j
1.1 深入JAVA API
. v" n) |5 i( Q* A1 s8 _ 1.1.1 Lang包
o0 }+ G8 u. d4 x 1.1.1.1 String类和StringBuffer类& a- N/ }# `6 w0 l i& o
位于java.lang包中,这个包中的类使用时不用导入
7 |$ q/ D% q7 J: d' c& @, d5 B String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成string字符串。
: L$ T2 i7 i; i' l) ^6 y String x=”a”+4+”c”编译时等效于String x=new StringBuffer().append(“a”).append(4).append(“c”).toString();4 J2 o" c, G3 q
字符串常量是一种特殊的匿名对象,String s1=”hello”;String s2=”hello”;则s1==s2;因为他们指向同一个匿名对象。3 R9 Q/ {% C9 v/ K3 ^
如果String s1=new String(“hello”);String s2=new String(“hello”);则s1!=s2;
, E% p9 W$ H" E /*逐行读取键盘输入,直到输入为“bye”时,结束程序
/ G8 E, X% a7 P0 E, x* ~# T* U* k 注:对于回车换行,在windows下面,有'\r'和'\n'两个,而unix下面只有'\n',但是写程序的时候都要把他区分开*/: W( @3 j# C: e) E
public class readline
, T2 l8 o5 k$ {# J% u* y {! M1 ]( ~3 j" J9 _/ @
public static void main(String args[])
4 Q' t3 p7 s" g0 _ A {& W+ W7 `9 f2 S
String strInfo=null;3 m1 _6 S4 J2 p
int pos=0;
( G3 [# J5 T/ ]# v byte[] buf=new byte[1024];//定义一个数组,存放换行前的各个字符
: V$ X9 S& s1 K9 [3 s0 M6 }$ Z( J int ch=0; //存放读入的字符% j0 Y/ \" e, n: S! c
system.out.println(“Please input a string:”);
4 b% L' d# {! Y" X" s; _ while(true)" }7 Q- f" B4 e6 I9 M8 l" ]) ]
{6 g! |! _1 k' X$ t& f8 h. d& S4 J4 ~
try
5 Z, {5 [1 r) j! N: W9 f {; D* Q6 {0 l S1 f6 B6 F" Z
ch=System.in.read(); //该方法每次读入一个字节的内容到ch变量中。
( I# |8 {% T5 K% X0 o5 ] }* j: R0 e1 t/ @' S
catch(Exception e)! H0 ]' F. p" ]# B3 G
{4 g2 u7 w6 B4 A! j1 b
}
, \! N: m% p/ i% D: A' D' M switch(ch)
6 v6 j4 Q) b6 I& f4 @7 ^ {
- o0 @: `4 [' ^0 h" d case '\r': //回车时,不进行处理
( `- g; f4 x1 ^+ b: g0 Z break;
! v0 [. g( D+ c8 u8 p case '\n': //换行时,将数组总的内容放进字符串中! N$ c& Y5 M! L' ~' D- [6 }
strInfo=new String(buf,0,pos); //该方法将数组中从第0个开始,到第pos个结束存入字符串。
5 k" d. x& S1 w7 k2 @ if(strInfo.equals("bye")) //如果该字符串内容为bye,则退出程序。
" s0 G( o1 W$ L/ o& Y/ G. [2 U* j {
/ {/ S: a% z. r3 ^5 p8 x+ k return;/ q; }0 c% I8 @: ~8 S1 f! o9 U% W
}+ O. S! T+ ?0 `7 h8 u
else //如果不为bye,则输出,并且竟pos置为0,准备下次存入。7 \. T7 K2 b. q4 j7 k
{
+ e7 R; {& \9 k9 @ Z$ J* @ System.out.println(strInfo);# k1 O; j/ Z; T- z8 h
pos=0;
% W" M. e! ?6 C6 b+ c( A/ o break;
% \, H3 m4 s: }7 |; C }
* F' J' p8 _! C) Q default:! `7 n: v/ _7 a8 B8 y% t% ?3 F% R
buf[pos++]=(byte)ch; //如果不是回车,换行,则将读取的数据存入数组中。: _2 L# e4 A' Y, X
}0 G" c. f$ S, A; ~+ G
}
# u! f z: f; S) U3 }$ w' H8 a }/ [, p/ \7 A4 y5 r3 n
}
4 \! _' }5 J( Q7 ]" f String类的常用成员方法- K1 n8 L) T' F% o5 o
1、 构造方法:
+ J* ]' ?5 w$ r* a' d- ?$ j* e String(byte[] byte,int offset,int length);这个在上面已经用到。
3 F8 |8 U# A& i. t7 V0 ^ 2、 equalsIgnoreCase:忽略大小写的比较,上例中如果您输入的是BYE,则不会退出,因为大小写不同,但是如果使用这个方法,则会退出。
, V4 x# o' q- ^8 m! d3 i 3、 indexOf(int ch);返回字符ch在字符串中首次出现的位置8 |! J# t5 Y% y5 l r- W. ]( e: H0 f
4、 substring(int benginIndex);
/ l- n' A$ l: s4 b 5、 substring(int beginIndex,int endIndex);" V& j4 i* F7 `! R# r
返回字符串的子字符串,4返回从benginindex位置开始到结束的子字符串,5返回beginindex和endindex-1之间的子字符串。
1 d: D4 b2 n0 _7 }+ u 基本数据类型包装类的作用是:将基本的数据类型包装成对象。因为有些方法不可以直接处理基本数据类型,只能处理对象,例如vector的add方法,参数就只能是对象。这时就需要使用他们的包装类将他们包装成对象。
! j4 g+ d9 H n; i3 B. f+ z 例:在屏幕上打印出一个*组成的矩形,矩形的宽度和高度通过启动程序时传递给main()方法的参数指定。, k% W, e* {- c! }) ?: T* m U& K
public class testInteger) K1 v! s9 k) E; f
{
9 K9 u* Q: C7 U) c5 Z public static void main(String[] args)
1 T! x( S, m) [ //main()的参数是string类型的数组,用来做为长,宽时,要转换成整型。
( v+ O: t2 H: E* z, D {
* x) a8 f* u3 E" p! N, P8 e3 ?( x int w=new Integer(args[0]).intValue();
8 h, {. e1 C5 H4 p' p3 U int h=Integer.parseInt(args[1]);
7 N5 p A3 G9 t% `9 ^2 ? q% n7 s9 y* y //int h=Integer.valueOf(args[1]).intValue();5 v2 R t( ]. R
//以上为三种将字符串转换成整形的方法。
8 b2 p! \# D. s" @; p/ C8 |4 |% B: j7 B
for(int i=0;i |