展开

关键词

首页关键词StringBuider

StringBuider

相关内容

云服务器

云服务器

腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。
  • 语法基础(三十五)-String与StringBuider

    关于string与StringBuilder字符串一旦创建就不可修改大小,每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能。所以对字符串添加或删除操作不频繁的话,就几个固定的string累加的时候就不需要StringBuilder了,毕竟StringBuilder的初始化也是需要时间的。对字符串添加或删除操作比较频繁的话那就用StringBuilder。String 字符串定义字符串第一种方式string s1 = www.baidu.com;第二种方式(利用数组方式)char { w, w, w, ., b, a, i, d, u, ., c, o, m };string s2 = new string(c);属性 获取字符串长度Console.WriteLine(s1.Length); 获取字符串的第五个元素,数字从0开始Console.WriteLine(s1); a IndexOf(字符串元素) 得到该元素在字符串的索引值int index = s1.IndexOf(b);Console.WriteLine(index); 4方法string s1 = www.baidu.com;string s2 = www.baidu.com; 比较两个字符串是否相同if (s1.Equals(s2)){ Console.WriteLine(两者相同);} if (s1 == s2){ Console.WriteLine(两者相同);} 返回一个int值。 0代表相同,-1代表小于, 1代表大于。 int result = s1.CompareTo(s2); 字符串拼接string s3 = Https: + s1; Concat 连接 System.String 的两个指定实例string s4 = String.Concat(Https:, s2);Console.WriteLine(s4); 遍历字符串for (int i = 0; i < s1.Length; i++){ Console.WriteLine(s1);} Replace()用里一个字符或者字符串替换字符串中给定的字符或字符串。 替换s1里面的w为9 输出结果:999.baidu.comConsole.WriteLine(s1.Replace(w,9));Split() 在出现给定字符的地方,把字符串分割成一个字符串数组。string s5 = www.baidu.com;char { b, u };string); }?SplitSubString() 在字符串中检索给定位置的子字符串string s1 = www.baidu.com;SubString() 在字符串中检索给定位置的子字符串string s6 = s1.SubString(4,5); 表示从第四个字符开始截取 5个字符 string s6 = S1.SubString(4); 从第四个字符开始截取后面的字符Console.WriteLine(s6); 将字符串中的小写转成大写string s7 = a0b9g0d9s3l2o9p9;Console.WriteLine(s7.ToUpper()); 将字符串中的大写转成小写string s8 = A0B9G0D9S3I2O9P9;Console.WriteLine(s8.ToLower()); Trim() 删除首位的空白string s9 = Super;Console.WriteLine(s9.Trim()); IndexOf()方法,取得字符串第一次出现某个给定字符串或者字符的位置int index = s1.IndexOf(baidu); 如果包含这个字串,就返回这个字串在母串中的第一个索引。如果不包含返回-1 Insert(插入位置,插入字符)Console.WriteLine(s1.Insert(0, 888)); Format:格式化字符串string s8 = string.Format(123);Console.WriteLine(s8);CopyTo()方法,把字符串中指定的字符复制到一个数组中string s9 = string.Copy(s8);char {a,b,s}; 将s8的值传入到cs数组中的0位置s8.CopyTo(0, cs, 0, 2);for (int i = 0; i < cs.Length; i++){ Console.WriteLine(cs);}?Join() 合并字符串数组,创建一个新的字符串string s3 = baidu;string { http:www.,.com};string s4 = String.Join(s3,s11);Console.WriteLine(s4);?结果注意点: 关于String字符串: String创建的字符串实际上是一个不可变的数据类型,一旦对其进行了初始化,那么字符串的内容就不可以改变了。 上面案例中字符串拼接,是产生了一个新的字符串,并且重新赋值。StringBuilder 可编辑的字符串String a1 = abc;  分配固定的内存大小a1+=def;  创建新的内存分配a1,代价比较昂贵 StringBuilder sb = new StringBuilder(20);  指定分配大小sb.Append(abc);  分配到堆区sb.Append(def);  不会被销毁,而是直接追加到后面。 5个修改StringBuilder的内容的方法StringBuilder.Append 将信息追加到当前StringBuilder的结尾。 StringBuilder.AppendFormat 用带格式文本替换字符串中传递的格式说明符。 StringBuilder.Insert 将字符串或对象插入到当前StringBuilder对象的指定索引处。 StringBuilder.Remove 从当前StringBuilder对象中移除指定数量的字符。 StringBuilder.Replace 替换指定索引处的指定字符。 Insert Insert方法将字符串或对象添加到当前StringBuilder中的指定位置。以下示例使用此方法将一个单词插入到StringBuilder的第六个位置。StringBuilder sb = new StringBuilder(Hello World!); sb.Insert(6,Beautiful ); Console.WriteLine(sb); 结果:Hello Beautiful World! Remove Remove方法从当前StringBuilder中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。以下示例使用Remove方法缩短StringBuilder。 StringBuilder sb = new StringBuilder(Hello World!); sb.Remove(5,7); Console.WriteLine(sb); 结果:Hello Replace 使用Replace方法,可以用另一个指定的字符来替换StringBuilder对象内的字符。以下示例使用Replace方法来搜索StringBuilder对象,查找所有的感叹号字符(!),并用问号字符(?)来替换它们。StringBuilder sb = new StringBuilder(Hello World!); sb.Replace(!, ?); Console.WriteLine(sb); 结果:Hello World?两者区别String声明之后在内存中大小是不可修改的,而StringBuilder可以自由扩展大小(String分配在栈区,StringBuilder分配在堆区)1)==它是比较的栈里面的值是否相等(值比较) 2)Equals它比较的是堆里面的值是否相等(引用地址值比较) 3)Object.ReferenceEquals(obj1,obj2)它是比较的是内存地址是否相等
    来自:
    浏览:108
  • String类常用方法(重要)

    StringBuffer); System.out.println(stringBuffer);helloword is StringBuffer stringBuilder.append( is StringBuider); System.out.println(stringBuilder);helloword is StringBuider}StringBuffer、StringBuilder --> StringStringBuffer(hello StringBuffer); System.out.println(sb1); StringBuilder sb2 = new StringBuilder(hello StringBuider
    来自:
    浏览:133
  • 广告
    关闭

    云产品限时秒杀

    云服务器1核2G首年50元,还有多款热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到
  • StringBuider 在什么条件下、如何使用效率更高?

    https:www.cnblogs.comkeatsCoderp13212289.html作者:@后青春期的 Keats本文为作者原创,转载请注明出处:https:www.cnblogs.comkeatsCoderp13212289.html引言测试用例测试结果结果分析结论引言都说 StringBuilder 在处理字符串拼接上效率要强于 String,但有时候我们的理解可能会存在一定的偏差。最近我在测试数据导入效率的时候就发现我以前对 StringBuilder 的部分理解是错误的。后来我通过实践测试 + 找原理 的方式搞清楚了这块的逻辑。现在将过程分享给大家测试用例我们的代码在循环中拼接字符串一般有两种情况第一种就是每次循环将对象中的几个字段拼接成一个新字段,再赋值给对象第二种操作是在循环外创建一个字符串对象,每次循环向该字符串拼接新的内容。循环结束后得到拼接好的字符串对于这两种情况,我创建了两个对照组第一组:在每次 For 循环中拼接字符串,即拼即用、用完即毁。分别使用 String 和 StringBuilder 拼接 ** * 循环内 String 拼接字符串,一次循环后销毁 * public static void useString(){ for (int i = 0; i < CYCLE_NUM_BIGGER; i++) { String str = str1 + i + str2 + i + str3 + i + str4 ; } } ** * 循环内 使用 StringBuilder 拼接字符串,一次循环后销毁 * public static void useStringBuilder(){ for (int i = 0; i < CYCLE_NUM_BIGGER; i++) { StringBuilder sb = new StringBuilder(); String s = sb.append(str1).append(i).append(str2).append(i).append(str3).append(i).append(str4).toString(); } } 第二组:多次 For 循环拼接一个字符串,循环结束后使用字符串,使用后由垃圾回收器回收。也是分别使用 String 和 StringBuilder 拼接 ** * 多次循环拼接成一个字符串 用 String * public static void useStringSpliceOneStr (){ String str = ; for (int i = 0; i < CYCLE_NUM_LOWER; i++) { str += str1 + str2 + str3 + str4 + i; } } ** * 多次循环拼接成一个字符串 用 StringBuilder * public static void useStringBuilderSpliceOneStr(){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < CYCLE_NUM_LOWER; i++) { sb.append(str1).append(str2).append(str3).append(str4).append(i); } } 为了保证测试质量,在每个测试项目进行前。线程休息 2s,之后空跑 5 次热身。最后执行 5 次求平均时间的方式计算时间 public static int executeSometime(int kind, int num) throws InterruptedException { Thread.sleep(2000); int sum = 0; for (int i = 0; i < num + 5; i++) { long begin = System.currentTimeMillis(); switch (kind){ case 1: useString(); break; case 2: useStringBuilder(); break; case 3: useStringSpliceOneStr(); break; case 4: useStringBuilderSpliceOneStr(); break; default: return 0; } long end = System.currentTimeMillis(); if(i > 5){ sum += (end - begin); } } return sum num; } 主方法public class StringTest { public static final int CYCLE_NUM_BIGGER = 10_000_000; public static final int CYCLE_NUM_LOWER = 10_000; public static final String str1 = 张三; public static final String str2 = 李四; public static final String str3 = 王五; public static final String str4 = 赵六; public static void main(String[] args) throws InterruptedException { int time = 0; int num = 5; time = executeSometime(1, num); System.out.println(String拼接 + CYCLE_NUM_BIGGER + 次, + num + 次平均时间: + time + ms); time = executeSometime(2, num); System.out.println(StringBuilder拼接 + CYCLE_NUM_BIGGER + 次, + num + 次平均时间: + time + ms); time = executeSometime(3, num); System.out.println(String拼接单个字符串 + CYCLE_NUM_LOWER + 次, + num + 次平均时间: + time + ms); time = executeSometime(4, num); System.out.println(StringBuilder拼接单个字符串 + CYCLE_NUM_LOWER + 次, + num + 次平均时间: + time + ms); }} 测试结果测试结果如下?结果分析第一组10_000_000 次循环拼接,在循环内使用 String 和 StringBuilder 的效率是一样的!为什么呢?使用 javap -c StringTest.class 反编译查看两个方法编译后的文件:?可以发现 String 方法拼接字符串编译器优化后使用的就是 StringBuilder、因此用例 1 和用例 2 的效率是一样的。第二组第二组的结果就是大家喜闻乐见的了,由于 10_000_000 次循环 String 拼接实在太慢所以我采用了 10_000 次拼接来分析。分析用例 3:虽然编译器会对 String 拼接做优化,但是它每次在循环内创建 StringBuilder 对象,在循环内销毁。下次循环他有创建。相比较用例 4 在循环外创建,多了 n 次 new 对象、销毁对象的操作、n - 1 次将 StringBuilder 转换成 String 的操作 。效率低也是理所应当了。扩展第一组的测试还有一种写法: ** * 循环内 使用 StringBuilder 拼接字符串,一次循环后销毁 * public static void useStringBuilderOut(){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < CYCLE_NUM_BIGGER; i++) { sb.setLength(0); sb.delete(0, sb.length()); String s = sb.append(str1).append(i).append(str2).append(i).append(str3).append(i).append(str4).toString(); } } 循环外创建 StringBuilder 每次循环开始的时候清空 StringBuilder 的内容然后拼接。这种写法无论使用 sb.setLength(0); 还是 sb.delete(0, sb.length()); 效率都比直接在循环内使用 String StringBuilder 慢。奈何才疏学浅我一直想不明白为什么他慢。我猜测是 new 对象的速度比重置长度慢,于是这样测试了以下: public static void createStringBuider() { for (int i = 0; i < CYCLE_NUM_BIGGER; i++) { StringBuilder sb = new StringBuilder(); } } public static void cleanStringBuider() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < CYCLE_NUM_BIGGER; i++) { sb.delete(0, sb.length()); } } 但是结果是 cleanStringBuider 更快。让我摸不着头脑如果有大神看到希望可以帮忙分析分析结论编译器会将 String 拼接优化成使用 StringBuilder,但是还是有一些缺陷的。主要体现在循环内使用字符串拼接,编译器不会创建单个 StringBuilder 以复用对于多次循环内拼接一个字符串的需求:StringBuilder 很快,因为其避免了 n 次 new 对象、销毁对象的操作,n - 1 次将 StringBuilder 转换成 String 的操作StringBuilder 拼接不适用于循环内每次拼接即用的操作方式。因为编译器优化后的 String 拼接也是使用 StringBuilder 两者的效率一样。后者写起来还方便...
    来自:
    浏览:228
  • 21张让你代码能力突飞猛进的速查表(神经网络、线性代数、可视化等)

    垃圾代码书写准则 StringBuider 在什么条件下、如何使用效率更高?
    来自:
    浏览:138
  • GPU 云服务器

    腾讯GPU 云服务器是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景……
    来自:
  • FPGA 云服务器

    腾讯FPGA云服务器是基于FPGA硬件可编程加速的弹性计算服务,您只需几分钟就可以获取并部署您的FPGA实例。结合IP市场提供的图片,视频,基因等相关领域的计算解决方案,提供无与伦比的计算加速能力……
    来自:
  • 专用宿主机

    专用宿主机(CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
    来自:
  • 黑石物理服务器2.0

    腾讯黑石物理服务器2.0(CPM)是一种包年包月的裸金属云服务,为您提供云端独享的高性能、无虚拟化的、安全隔离的物理服务器集群。使用该服务,您只需根据业务特性弹性伸缩物理服务器数量,获取物理服务器的时间将被缩短至分钟级。
    来自:
  • 容器服务

    腾讯云容器服务(Tencent Kubernetes Engine ,TKE)基于原生kubernetes提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼容原生 kubernetes API ,扩展了腾讯云的云硬盘、负载均衡等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提高了大规模容器集群管理的便捷性,帮助用户降低成本,提高效率。容器服务提供免费使用,涉及的其他云产品另外单独计费。
    来自:
  • 弹性伸缩

    腾讯弹性伸缩(AS)为您提供高效管理计算资源的策略。您可设定时间周期性地执行管理策略或创建实时监控策略,来管理 CVM 实例数量,并完成对实例的环境部署,保证业务平稳顺利运行。弹性伸缩策略不仅能够让需求稳定规律的应用程序实现自动化管理,同时告别业务突增或CC攻击等带来的烦恼,对于每天、每周、每月使用量不停波动的应用程序还能够根据业务负载分钟级扩展。
    来自:
  • 云函数

    云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。SCF 是实时文件处理和数据处理等场景下理想的计算平台。
    来自:
  • 批量计算

    批量计算(Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算可以根据用户提供的批处理规模,智能地管理作业和调动所其需的最佳资源……
    来自:
  • 消息队列 CMQ

    腾讯云消息队列(CMQ)是一种分布式消息队列服务,它能够提供可靠的基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)之间的收发消息,存储在可靠有效的 CMQ 队列中,防止消息丢失。CMQ 支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
    来自:
  • 消息队列 CKafka

    CKafka(Cloud Kafka)是一个分布式的、高吞吐量、高可扩展性的消息系统,100%兼容开源 Kafka API(0.9版本)。Ckafka 基于发布/订阅模式,通过消息解耦,使生产者和消费者异步交互,无需彼此等待。Ckafka 具有数据压缩、同时支持离线和实时数据处理等优点,适用于日志压缩收集、监控数据聚合等场景。
    来自:
  • API 网关

    腾讯云 API 网关(API Gateway)是腾讯云推出的一种 API 托管服务,能提供 API 的完整生命周期管理,包括创建、维护、发布、运行、下线等。您可使用 API 网关封装自身业务,将您的数据、业务逻辑或功能安全可靠的开放出来,用以实现自身系统集成、以及与合作伙伴的业务连接。
    来自:
  • 微服务平台 TSF

    腾讯微服务平台(TSF)是一个围绕应用和微服务的 PaaS 平台,提供一站式应用全生命周期管理能力和数据化运营支持,提供多维度应用和服务的监控数据,助力服务性能优化。
    来自:
  • 对象存储

    腾讯云对象存储数据处理方案主要针对于存储于腾讯云对象存储COS中的数据内容进行处理加工,满足压缩、转码、编辑、分析等多种诉求,激活数据价值。
    来自:
  • 文件存储

    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。CFS 可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云 CFS 的管理界面简单、易使用,可实现对现有应用的无缝集;按实际用量付费,为您节约成本,简化 IT 运维工作。
    来自:
  • 归档存储

    腾讯云归档存储(Cloud Archive Storage, CAS)是面向企业和个人开发者提供的低成本、高可靠且易于管理的云端离线存储服务,适用于海量、非结构化数据长时间备份,实现数据的容灾和c。归档存储采用分布式云端存储,您可以通过 RESTful API 对存储的数据进行访问。归档存储易于管理,您无需关心硬件维护及容量扩展;按实际使用量付费,为您节省额外成本。
    来自:

扫码关注云+社区

领取腾讯云代金券