byte数组转string_String类和StringBuffer类

92567615c0ccf537961ccc33f877d927.png

位于java.lang包中,这个包中的类使用时不用导入

String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成string字符串。

String x=”a”+4+”c”编译时等效于String x=new StringBuffer().append(“a”).append(4).append(“c”).toString();

字符串常量是一种特殊的匿名对象,String s1=”hello”;String s2=”hello”;则s1==s2;因为他们指向同一个匿名对象。

如果String s1=new String(“hello”);String s2=new String(“hello”);则s1!=s2;

/*逐行读取键盘输入,直到输入为“bye”时,结束程序

注:对于回车换行,在windows下面,有'r'和'n'两个,而unix下面只有'n',但是写程序的时候都要把他区分开*/

public class readline

{

public static void main(String args[])

{

String strInfo=null;

int pos=0;

byte[] buf=new byte[1024];//定义一个数组,存放换行前的各个字符

int ch=0; //存放读入的字符

system.out.println(“Please input a string:”);

while(true)

{

try

{

ch=System.in.read(); //该方法每次读入一个字节的内容到ch变量中。

}

catch(Exception e)

{

}

switch(ch)

{

case 'r': //回车时,不进行处理

break;

case 'n': //换行时,将数组总的内容放进字符串中

strInfo=new String(buf,0,pos); //该方法将数组中从第0个开始,到第pos个结束存入字符串。

if(strInfo.equals("bye")) //如果该字符串内容为bye,则退出程序。

{

return;

}

else //如果不为bye,则输出,并且竟pos置为0,准备下次存入。

{

System.out.println(strInfo);

pos=0;

break;

}

default:

buf[pos++]=(byte)ch; //如果不是回车,换行,则将读取的数据存入数组中。

}

}

}

}

String类的常用成员方法

1、 构造方法:

String(byte[] byte,int offset,int length);这个在上面已经用到。

2、 equalsIgnoreCase:忽略大小写的比较,上例中如果您输入的是BYE,则不会退出,因为大小写不同,但是如果使用这个方法,则会退出。

3、 indexOf(int ch);返回字符ch在字符串中首次出现的位置

4、 substring(int benginIndex);

5、 substring(int beginIndex,int endIndex);

返回字符串的子字符串,4返回从benginindex位置开始到结束的子字符串,5返回beginindex和endindex-1之间的子字符串。

基本数据类型包装类的作用是:将基本的数据类型包装成对象。因为有些方法不可以直接处理基本数据类型,只能处理对象,例如vector的add方法,参数就只能是对象。这时就需要使用他们的包装类将他们包装成对象。

例:在屏幕上打印出一个*组成的矩形,矩形的宽度和高度通过启动程序时传递给main()方法的参数指定。

public class testInteger

{

public static void main(String[] args)

//main()的参数是string类型的数组,用来做为长,宽时,要转换成整型。

{

int w=new Integer(args[0]).intValue();

int h=Integer.parseInt(args[1]);

//int h=Integer.valueOf(args[1]).intValue();

//以上为三种将字符串转换成整形的方法。

for(int i=0;i<h;i++)

{

StringBuffer sb=new StringBuffer(); //使用stringbuffer,是因为它是可追加的。

for(int j=0;j<w;j++)

{

sb.append('*');

}

System.out.println(sb.toString()); //在打印之前,要将stringbuffer转化为string类型。

}

}

}

比较下面两段代码的执行效率:

(1)String sb=new String();

For(int j=0;j<w;j++)

{

Sb=sb+’*’;

}

(2) StringBuffer sb=new StringBuffer();

For(int j=0;j<w;j++)

{

Sb.append(‘*’);

}

(1) 和(2)在运行结果上相同,但效率相差很多。

(1) 在每一次循环中,都要先将string类型转换为stringbuffer类型,然后将‘*’追加进去,然后再调用tostring()方法,转换为string类型,效率很低。

(2) 在没次循环中,都只是调用原来的那个stringbuffer对象,没有创建新的对象,所以效率比较高。

1.1.1.2 System类与Runtime类

由于java不支持全局函数和全局变量,所以java设计者将一些与系统相关的重要函数和变量放在system类中。

我们不能直接创建runtime的实例,只能通过runtime.getruntime()静态方法来获得。

编程实例:在java程序中启动一个windows记事本程序的运行实例,并在该运行实例中打开该运行程序的源文件,启动的记事本程序5秒后关闭。

public class Property

{

public static void main(String[] args)

{

Process p=null; //java虚拟机启动的进程。

try

{

p=Runtime.getRuntime().exec("notepad.exe Property.java"); //启动记事本并且打开源文件。

Thread.sleep(5000); //持续5秒

p.destroy(); //关闭该进程

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值