java基础----String、StringBuffer、StringBuilder
1.String
package com.henu;public class Demo05 {public static void main(String[] args) {/** 字符串是常量;它们的值在创建之后不能更改,这是什么意思呢?其实就是说一旦这个字符串确定了,* 那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是可以改变的。*//** 首先创建一个String对象s,然后让s的值为“ABCabc”, 然后又让s的值为“123456”。 * 从打印结果可以看出,s的值确实改变了。那么怎么还说String对象是不可变的呢? 其实这里存在一个误区: *s只是一个String对象的引用,并不是对象本身。对象在内存中是一块内存区,成员变量越多,* 这块内存区占的空间越大。引用只是一个4字节的数据,里面存放了它所指向的对象的地址,* 通过这个地址可以访问对象。 也就是说,s只是一个引用,它指向了一个具体的对象,当s=“123456”;* 这句代码执行过之后,又创建了一个新的对象“123456”, 而引用s重新指向了这个心的对象,* 原来的对象“ABCabc”还在内存中存在,并没有改变。*/String str1 = "ABCabc";str1 = "123456"; String s3 = "abc";String s4 = new String("abc");System.out.println(s3==s4);//falseSystem.out.println(s3.equals(s4));//true,/*s3和s4的创建方式有什么不同呢?s3创建,在内存中只有一个对象。这个对象在字符串常量池中s4创建,在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中*/byte[] bys = new byte[]{97,98,99,100};// 创建String对象,把数组元素作为字符串的内容String s5 = new String(bys);//创建String对象,把一部分数组元素作为字符串的内容,参数offset为数组元素的起始索引位置,参数length为要几个元素String s6 = new String(bys, 1, 3); /** String方法查找* */String str2 = "abcde";String s1 = str2.substring(1); //返回一个新字符串,内容为指定位置开始到字符串末尾的所有字符String s2 = str2.substring(2, 4);//返回一个新字符串,内容为指定位置开始到指定位置结束所有字符String str = "StringDemo.java";boolean b1 = str.startsWith("Demo");//判断是否以给定字符串开头boolean b2 = str.startsWith("String");boolean b3 = str.endsWith("java");//判断是否以给定字符串结尾String str3 = "abcde";int index = str3.indexOf("bcd"); //判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回-1boolean b4 = str3.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false/*** 将字符串转化为字符数组,或者字节数组*/String str4 = "abcde";char[] chs = str4.toCharArray();byte[] bytes = str4.getBytes();for(byte b : bytes) {System.out.println(b);}/*** 判断两个字符串中的内容是否相同*/boolean flag = str3.equals(str);/*** 判断该字符串的内容是否为空的字符串 isEmpty()获取给定的字符,在该字符串中第一次出现的位置 indexOf(String str)获取该字符串中指定位置上的字符 (返回值String)substring(int beginIndex) substring(int beginIndex, int endIndex)把该字符串转换成 小写字符串 toLowerCase()把该字符串转换成 大写字符串 toUpperCase()在该字符串中,将给定的旧字符,用新字符替换 replace(char oldChar, char newChar)在该字符串中, 将给定的旧字符串,用新字符串替换replaceAll(String regex, String replacement)replaceFirst(String regex, String replacement)去除字符串两端空格,中间的不会去除,返回一个新字符串 trim()*/String string = str4.substring(str4.indexOf(2));System.out.println(string);}}
1.练习1
package com.henu;
/*** @author limengdong* @date 2019年7月19日* @classroom 208bigdata* @description:获取指定字符串中,大写字母、小写字母、数字的个数。*/
public class Demo06 {public static void main(String[] args) {String str = "AbCDfg3876";char[] cs = str.toCharArray();int bigCount = 0;int smallCount = 0;int numberCount = 0;for(int i = 0; i < cs.length; i++) {if (cs[i] >= 48 && cs[i] <= 57) {numberCount++;}else if (cs[i] >= 65 && cs[i] <= 90) {bigCount++;}else if (cs[i] >= 97 && cs[i] <= 122) {smallCount++;}else {continue;}}System.out.println("大写字母个数为:"+bigCount);System.out.println("小写字母个数为:"+smallCount);System.out.println("数字个数为:"+numberCount);}
}
2.练习2
package com.henu;import java.util.Arrays;/*** @author limengdong* @date 2019年7月19日* @classroom 208bigdata* @description:将字符串中,第一个字母转换成大写,其他字母转换成小写,并打印改变后的字符串* A = (char)a -32;*/
public class Demo07 {public static void main(String[] args) {//第一种写法/*String str = "abCDfg3876";String str1 = str.toLowerCase();char[] cs = str1.toCharArray();cs[0] = (char) (cs[0] - 32);System.out.println(cs[0]);String str2 = Arrays.toString(cs);System.out.println(str2);*///第二种写法String str = "abCDfg3876";String first = str.substring(0, 1);String end = str.substring(1);String big = first.toUpperCase();String small = end.toLowerCase();String res = big + small;System.out.println(res);}}
3.练习三
package com.henu;
/*** @author limengdong* @date 2019年7月19日* @classroom 208bigdata* @description:查询大字符串中,出现指定小字符串的次数。* 如“hellojava,nihaojava,javazhenbang”中查询出现“java”的次数。*/
public class Demo08 {public static void main(String[] args) {String string = "hellojava,nihaojava,javazhenbang";int count = 0;int index = -1;/*** string.indexOf("java")取出第一个java字符串所在的位置,并赋值index。* !=-1代表在字符串string中存在java字符串,当去过第一个index值后,* 然后substring(index+1),从第一个java后取字符串,然后再做判断。*/while((index = string.indexOf("java")) != -1) {string = string.substring(index+1);count++;}System.out.println(count);}}
2.StringBuffer
package com.henu;
/*** @author limengdong* @date 2019年7月19日* @classroom 208bigdata* @description:StringBuffer的方法使用。*/
public class Demo09 {public static void main(String[] args) {/*** StringBuffer 的方法使用*/StringBuffer sBuffer = new StringBuffer();sBuffer.append("java").append("天下第一");sBuffer.append("php").append("天下无敌");System.out.println(sBuffer);//java天下第一php天下无敌sBuffer.delete(1, 2);System.out.println(sBuffer);//jva天下第一php天下无敌sBuffer.insert(1, "a");System.out.println(sBuffer);//java天下第一php天下无敌sBuffer.replace(0, 5, "python");System.out.println(sBuffer);//python下第一php天下无敌sBuffer.reverse();System.out.println(sBuffer);//敌无下天php一第下nohtypSystem.out.println(sBuffer.toString());//敌无下天php一第下nohtyp/*** StringBuffer类方法查找练习*///substring(int start, int end) 返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。/* 创建一个字符串缓冲区对象。用于存储数据。StringBuffer sb = new StringBuffer();添加数据。不断的添加数据后,要对缓冲区的最后的数据进行操作,必须转成字符串才可以。String str = sb.append(true).append("hehe").toString();*/int[] arr = {34,12,89,68};String str = toString_1(arr);System.out.println(str); }//练习:int[] arr = {34,12,89,68};将一个int[]中元素转成字符串 格式 [34,12,89,68]public static String toString_1(int[] arr) {StringBuffer stringBuffer = new StringBuffer();stringBuffer.append("[");for(int i = 0; i < arr.length; i++) {if (i != arr.length-1) {stringBuffer.append(arr[i]+","); }else {stringBuffer.append(arr[i]+"]");}}return stringBuffer.toString();}}
3.StringBuilder
package com.henu;
/*** @author limengdong* @date 2019年7月19日* @classroom 208bigdata* @description:StringBuilder类*/
public class Demo10 {public static void main(String[] args) {/** 一个可变的字符序列。 此类提供与StringBuffer的API,但不保证同步。* 此类设计用作简易替换为StringBuffer在正在使用由单个线程字符串缓冲区的地方(如通常是这种情况)。* 在可能的情况下,建议使用这个类别优先于StringBuffer ,因为它在大多数实现中将更快。 */}}
java基础----String、StringBuffer、StringBuilder相关推荐
- 【翻译】Java中String, StringBuffer, StringBuilder的区别
2019独角兽企业重金招聘Python工程师标准>>> String 是 Java 中最重要的类之一,并且任何刚开始做Java编程的人,都会 用String定义一些内容,然后通过著 ...
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- Java之String,StringBuffer,StringBuilder
1.String 在 Java 中,字符串被作为 String 类型的对象处理. String 类位于 java.lang 包中.默认情况下,该包被自动导入所有的程序.String 对象创建后则不能被 ...
- Java基础-String和StringBuilder类型(11)
String类概述 字符串是由多个字符组成的一串数据 字符串可以看成是字符数组 构造方法 public String(String original) public String(char[] val ...
- 黑马程序员——Java基础---String与StringBuilder
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- Java中String,StringBuffer,StringBuilder的区别
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 运行速度 StringBuilder > StringBuffe ...
- 2.Java中String,StringBuilder以及StringBuffer的关系与区别
String StringBuffer StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...
- 重温java中的String,StringBuffer,StringBuilder类
不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...
- 浅谈 Java 字符串(String, StringBuffer, StringBuilder)
我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...
- `java`学习笔记(十二)`Java`--`String``StringBuffer``StringBuilder`
Java–String&&StringBuffer&&StringBuilder 文章目录 `Java`--`String`&&`StringBuffe ...
最新文章
- 目标检测中如何定义正负样本,和正负样本在学习过程中loss计算起的作用
- c语言logout_C++ 格式化日志输出实现代码
- ECMAScript 对象类型
- 【bzoj4994】[Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组
- html本地缓存未查看信息,不同用户看到了相同的信息-一次web系统缓存问题的解决...
- 我的敏捷、需求分析、UML、软件设计电子书 - 下载(持续更新中)
- 二叉树类图_数据结构(十四)——二叉树
- JSP 页面实现一个计算器功能
- C语言从入门到精通保姆级教程(2021版上)
- vim文本编辑器的操作和命令(可作手册查询)
- Web漏洞之CORS与JSONP跨域漏洞
- 网站设计流程分为哪几个步骤
- 创业者、如何可以投资小,又可以依附互联网去创业?
- 登录页面渗透测试思路与总结
- Q:python编码
- Windows10下安装vs2013旗舰版(Visual Studio 2013 Ultimate)
- Hibernate之QBE--》用语法函数表示sql语句【个人感觉此技术相当之垃圾,反其正道而行】(二十八)
- 路缘石成型机使用技术更新后施工效果呈现的过程
- 已经拍好的视频怎么加水印?视频加水印方法大分享
- macOS 13.0 Cocoapods安装 (you don‘t have write permissions for the /Library/Ruby/Gems/2.6.0 directory)
热门文章
- POJ - 3693 Maximum repetition substring(后缀数组+RMQ)
- Web开发-Django表单
- 差分约束系统之Bellman_Ford与Spfa判断负权回路
- 线段树HDU1698(成段更新)
- HDU2608 0 or 1
- masm中常用的伪指令
- TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系
- c++中的pod类型
- 【送书福利8本】YYDS《剑指Offer》,百万程序员人手一册
- 慌了,居然被问到怎么做高并发系统的限流