• 关于

    StringBuffer

    的搜索结果

问题

java中多个StringBuffer错误的相加问题

蛮大人123 2019-12-01 20:05:26 835 浏览量 回答数 1

问题

java StringBuffer传参问题

蛮大人123 2019-12-01 20:10:04 915 浏览量 回答数 1

问题

StringBuffer问题

蛮大人123 2019-12-01 19:57:57 925 浏览量 回答数 1

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

public static void main(String[] args) throws Exception { int max=5; //每次读的长度,因为我的文件比较小,测试的长度也小 FileReader file=new FileReader("E:\\a.txt"); BufferedReader bufferedReader=new BufferedReader(file); char[] arr=new char[6];//缓冲区设置比较小 int len=arr.length; len=bufferedReader.read(arr, 0, len); StringBuffer stringBuffer=new StringBuffer(); stringBuffer.append(new String(arr)); while (len!=-1) { len=bufferedReader.read(arr, 0, len); if(len!=-1){ stringBuffer.append(new String(arr).substring(0,len));//最后会有没覆盖的数据 if(stringBuffer.toString().split(" ").length>max){ bufferedReader.mark(max); //标记下次读取的位置 //readAheadLimit - 在仍保留该标记的情况下,对可读取字符数量的限制。在读取达到或超过此限制的字符后,尝试重置流可能会失败。限制值大于输入缓冲区的大小将导致分配一个新缓冲区,其大小不小于该限制值。因此应该小心使用较大的值。 //api上是这么解释的,但是我设置很小的时候下面还是读完了 break; } } } bufferedReader.reset(); System.out.println(stringBuffer.toString()); //第二次读时候会接着上次读到的位置读 len=arr.length; len=bufferedReader.read(arr, 0, len); stringBuffer=new StringBuffer(); stringBuffer.append(new String(arr)); while (len!=-1) { len=bufferedReader.read(arr, 0, len); if(len!=-1){ stringBuffer.append(new String(arr).substring(0,len));//最后会有没覆盖的数据 } } System.out.println(stringBuffer.toString()); bufferedReader.close(); file.close(); }

蛮大人123 2019-12-02 02:06:18 0 浏览量 回答数 0

问题

关于append的问题,打印结果不同

51干警网 2019-12-01 19:41:31 945 浏览量 回答数 1

回答

简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。String:在String类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个Java字符串中的某个单独字符,所以在JDK文档中称String类的对象是不可改变的。然而,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的。 StringBuffer:StringBuffer类属于一种辅助类,可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符 比 String使用 + 操作符添加字符 到 一个已经存在的字符串后面有效率得多。因为使用 + 操作符每一次将字符添加到一个字符串中去时,字符串对象都需要寻找一个新的内存空间来容纳更大的字符串,这无凝是一个非常消耗时间的操作。添加多个字符也就意味着要一次又一次的对字符串重新分配内存。使用StringBuffer类就避免了这个问题。StringBuffer是线程安全的,在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。

wangccsy 2019-12-02 01:45:22 0 浏览量 回答数 0

回答

在java中有3个类来负责字符的操作。 1.Character 是进行单个字符操作的 2.String 对一串字符进行操作。不可变类。 3.StringBuffer 也是对一串字符进行操作,但是可变类。String: 是对象不是原始类型. 为不可变对象,一旦被创建,就不能修改它的值. 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去. String 是final类,即不能被继承.StringBuffer: 是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象 它只能通过构造函数来建立, StringBuffer sb = new StringBuffer(); note:不能通过付值符号对他进行付值. sb = "welcome to here!";//error 对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer 中付值的时候可以通过它的append方法. sb.append("hello");字符串连接操作中StringBuffer的效率要比String高:String str = new String("welcome to "); str += "here"; 的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后 再将StringBuffer toSting(); 这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值. 这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.

蛮大人123 2019-12-02 02:09:23 0 浏览量 回答数 0

问题

递归:字符串的全排列,看看我的程序为什么总是出错? 400 请求报错 

kun坤 2020-05-30 21:43:15 5 浏览量 回答数 1

问题

String类和StringBuffer类的区别是什么?StringBuffer类提供了那些独特的方

游客pklijor6gytpx 2019-12-01 22:02:01 11 浏览量 回答数 1

回答

(1)运行效率:StringBuilder效率高于StringBuffer(2)线程安全:StringBuffer是线程安全的,StringBuilder是线程不安全的。StringBuffer和StringBuilder都继承自抽象父类AbstractStringBuilder。而这两个类本身的方法的主要逻辑在AbstractStringBuilder这个父类中已经都实现,唯一的区别就是StringBuffer的方法加入synchronized关键字,而StringBuilder没加。

小川游鱼 2019-12-02 01:42:29 0 浏览量 回答数 0

回答

String str = "To be or not to be"; String[] ss=str.split("or"); StringBuffer s1 = new StringBuffer(ss[0]); StringBuffer s2 = new StringBuffer(ss[1]); System.out.println(str+" 反转成 "+s1.reverse()+" or "+s2.reverse());

蛮大人123 2019-12-02 01:50:16 0 浏览量 回答数 0

问题

JAVA 匿名内部类怎么传参给全局变量

蛮大人123 2019-12-01 20:20:50 1151 浏览量 回答数 1

回答

你在operator方法中,当b=a时,b所对应的内存,已经不是原来new 出来的内存,而是和a指向了同一块内存,所以在后面的b.append(a)中,a才会输出ABAB;而b的内存和a是同一块,所以b也是ABAB。而在main中,a所在内存的值已经变为ABAB了,但是b的内存由于在operator的b.append之前,所指的内存已经改变,所以还是B要是一样的话,可以按我下面写的 public class Test { static StringBuffer a=null; static StringBuffer b=null; public static void main(String[] args) { a= new StringBuffer("A"); b = new StringBuffer("B"); Test t=new Test(); t.operator(a,b); System.out.println("main方法:" + a + "," + b); } private void operator(StringBuffer c, StringBuffer d) { a=c; b=d; a.append(b); b = a; b.append(a); System.out.println("operator:" + a + "," + b); } }

51干警网 2019-12-02 01:34:58 0 浏览量 回答数 0

回答

可变性 String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。 线程安全性 String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。 性能 每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。 对于三者使用的总结 如果要操作少量的数据用 = String 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

剑曼红尘 2020-03-27 16:26:12 0 浏览量 回答数 0

问题

求救,jsch执行linux命令

杨冬芳 2019-12-01 20:24:29 1568 浏览量 回答数 1

回答

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。而StringBuilder是线程不安全的,而StringBuffer是线程安全的。所以在多线程环境下存在大量字符串操作的情况下,请使用StringBuffer

houfeng2 2019-12-02 01:47:05 0 浏览量 回答数 0

回答

//for循环 public static void forFunc(int n) { int result = 1; StringBuffer str = new StringBuffer(); for (int i = n; i > 0; i--) { if (i > 1) { str.append(i + "*"); } else { str.append(i + "="); } result *= i; } str.append(result); System.out.print(str.toString()); } //while循环 public static void whileFunc(int n) { int result = 1; StringBuffer str = new StringBuffer(); while (n > 0) { if (n > 1) { str.append(n + "*"); } else { str.append(n + "="); } result *= n; n--; } str.append(result); System.out.print(str.toString()); } //do_while循环 public static void doWhileFunc(int n) { int result = 1; StringBuffer str = new StringBuffer(); do { if (n > 1) { str.append(n + "*"); } else { str.append(n + "="); } result *= n; n--; } while (n > 0); str.append(result); System.out.print(str.toString()); } //递归 public static void recursiveFunc(int n, int result) { if (n > 1) { System.out.print(n + "*"); recursiveFunc(n - 1, result * n); } else { System.out.print(n + "=" + result); } }

liujae 2019-12-02 01:25:47 0 浏览量 回答数 0

回答

1、三者在执行速度上:StringBuilder > StringBuffer > String (由于String是常量,不可改变,拼接时会重新创建新的对象)。 2、StringBuffer是线程安全的,StringBuilder是线程不安全的。(由于StringBuffer有缓冲区)

剑曼红尘 2020-04-10 12:55:15 0 浏览量 回答数 0

回答

估计是你的Clob包引用有问题。 public static String getCreateTabelSQL(String tableName, String owner) throws Exception{ final StringBuffer FIND_CREATE_TABLE_SQL = new StringBuffer(); FIND_CREATE_TABLE_SQL.append("Select Dbms_Metadata.Get_Ddl('TABLE', '"); FIND_CREATE_TABLE_SQL.append(tableName); FIND_CREATE_TABLE_SQL.append("', '"); FIND_CREATE_TABLE_SQL.append(owner); FIND_CREATE_TABLE_SQL.append("') From Dual"); ResultSet rs = null; oracle.sql.CLOB clob = null; java.sql.PreparedStatement pstmt = dbUtil.getConnection().prepareStatement(FIND_CREATE_TABLE_SQL.toString()); rs= pstmt.executeQuery(); if(rs.next()){ //rs.getClob(1)中参数1指的是HCONTENT字段索引,第一个字段从1开始而不是从0。 //也可以用字段名来取rs.getClob("HCONTENT") clob = (oracle.sql.CLOB)rs.getClob(1); } return ClobToString(clob); } public static String ClobToString(oracle.sql.CLOB clob) { String reString = ""; StringBuffer sb; try { Reader is = clob.getCharacterStream();// 得到流 BufferedReader br = new BufferedReader(is); String s = br.readLine(); sb = new StringBuffer(); while (s != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING sb.append(s); s = br.readLine(); } reString = sb.toString(); System.out.println(reString); } catch (Exception e) { e.printStackTrace(); } return reString; } 这段代码可以的。亲测

a123456678 2019-12-02 02:14:24 0 浏览量 回答数 0

问题

String,StringBuffer,StringBuilder区别

剑曼红尘 2020-04-10 12:55:08 0 浏览量 回答数 1

回答

通过“ +”操作符和StringBuffer.append()方法来连接字符串,并比较其性能: 公共类StringConcatenate { 公共静态void main (String [ ] args ){ long startTime = System 。currentTimeMillis (); for (int i = 0 ; i < 5000 ; i ++ ){ 字符串结果= “ 这是” + “ 测试” + “ 差” + “ 之间的” + “ 字符串” + “ 和” + “ 的StringBuffer ” ; } long endTime = 系统。currentTimeMillis (); 系统。出来。println (“ 串口连接” + “ -使用+操作符:” + “ ms ” ); long startTime1 = 系统。currentTimeMillis (); for (int i = 0 ; i < 5000 ; i ++ ){ StringBuffer 结果= new StringBuffer (); 结果。append (“ 这是” ); 结果。附加 (“ 测试” ); 结果。追加(“ 差异” ); 结果。追加(“ 之间” ); 结果。append (“ 字符串” ); 结果。追加(“ 和” ); 结果。append (“ StringBuffer ” ); } long endTime1 = 系统。currentTimeMillis (); 系统。出来。println (“ 字符串连接” + “ -使用StringBuffer:” + (endTime1 - startTime1 )+ “ ms ” ); } } 以上代码实例输出结果为: 双向连接-使用+操作符:0毫秒 双向连接-使用StringBuffer:6毫秒

珍宝珠 2020-02-12 16:51:52 0 浏览量 回答数 0

问题

java中StringBuffer和String有什么区别

bug........11. 2020-06-29 19:07:34 47 浏览量 回答数 1

问题

[@炯轩][¥20]string和stringBuffer的区别

jack胡 2019-12-01 19:28:13 403 浏览量 回答数 1

问题

String、StringBuffer、StringBuilder区别是什么?

游客bnlxddh3fwntw 2020-04-10 13:13:23 0 浏览量 回答数 1

问题

。。。短信平台。。。。。? 400 报错

爱吃鱼的程序员 2020-06-01 11:53:43 0 浏览量 回答数 1

回答

首相finally{}的执行时间是在try{}中间的return返回的中间或者是之后。准确的说是在return语句的中间,但是可以理解为return之后。所以第一种情况的结果必然是1,因为此时的n是1。 第二种情况是String,这里要理解String的特性,String是不可变的,是内容不可以变的,但是应用是可变的。在finally执行之前已经return了String的一个引用了,此String的引用指向的是xxx。所以即使后面的String所指向的内容已经变化但是对之前那个不造成影响。 第三种情况是,StringBuffer,String与Stringbuffer之间的不同是,String是内容不可以变,而Stringbuffer是内容可变。所以返回的StringBuffer的引用之后,在finally里面对b所指向的引用内容进行了改变,虽然引用b的地址值没有改变,但是到main方法里面时,b所指向的内容已经变化了,所以打印出来的结果也是变化后的结果。 对于这个try{}finally{}的执行顺序理解之后,加上对每个数据类型的特点有比较深的理解就可以理解这类问题了。 希望我的回答对你有帮助

蛮大人123 2019-12-02 01:49:23 0 浏览量 回答数 0

问题

[@徐雷frank][¥20]StringBuilder、StringBuffer的区别

sonic27 2019-12-01 20:26:41 470 浏览量 回答数 2

问题

String和StringBuffer、StringBuilder的区别是什么?

剑曼红尘 2020-03-27 16:25:47 0 浏览量 回答数 1

回答

StringBuilder和StringBuffer,但是要考虑线程安全, StringBuffer 字符串变量(线程安全,性能低,) StringBuilder 字符串变量(非线程安全,性能高)

徐雷frank 2019-12-02 01:44:22 0 浏览量 回答数 0

问题

String, StringBuffer, StringBuilder的区别是什么?String为什

问问小秘 2020-01-09 10:27:40 3 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站