当前位置: 首页 > news >正文

南京越城建设集团网站沧州网站建设定制价格

南京越城建设集团网站,沧州网站建设定制价格,多光营销软件网站,不用写代码可以做网站的软件#x1f3a5; 个人主页#xff1a;深鱼~#x1f525;收录专栏#xff1a;JavaSE#x1f304;欢迎 #x1f44d;点赞✍评论⭐收藏 目录 前言#xff1a; 一、常用方法 1.1 字符串构造 1.2 String对象的比较 #xff08;1#xff09;比较是否引用同一个对象 注意… 个人主页深鱼~收录专栏JavaSE欢迎 点赞✍评论⭐收藏 目录 前言 一、常用方法 1.1 字符串构造 1.2 String对象的比较 1比较是否引用同一个对象 注意对于内置类型比较的是变量中的值对于引用类型比较的是引用中的地址 2boolean equals(Object anObject) 方法按照字典序比较 3 int compareTo(String s) 方法: 按照字典序进行比较 4 int compareToIgnoreCase(String str) 方法与compareTo方式相同但是忽略大小写比较 1.3 字符串查找 1.4转化 1数值和字符串转化 2大小写转换 3字符串转数组 4格式化 1.5  字符串替换 1.6 字符串拆分 1.7 字符串截取 1.8 其他操作方法 1.9 字符串的不可变性 1.10字符串修改 二、 StringBuilder和StringBuffer 2.1 StringBuilder的介绍 2.2面试题 前言 在C语言中已经涉及到字符串了但是在C语言中要表示字符串只能使用字符数组或者字符指针可以使用标准库提供的字符串系列函数完成大部分操作但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想而字符串应用又非常广泛因此Java语言专门提供了String类。 在开发和校招笔试中字符串也是常客比如 把字符串转换成整数 字符串相加 而且在面试中也频繁被问到比如String、StringBuff和StringBulider之间的区别等 一、常用方法 1.1 字符串构造 String类提供的构造方式非常多常用的就以下三种 public static void main(String[] args) {//常量字符串String s1 Hello World;//直接newString对象String s2 new String(Hello World);//使用字符数组进行构造char [] array {H,e,l,l,o,W,o,r,l,d};String s3 new String(array);} 注意 1String是引用类型内部并不存储字符串本身在String类的实现源码中String类实例变量如下 public static void main(String[] args) {// s1和s2引用的是不同对象 s1和s3引用的是同一对象String s1 new String(hello);String s2 new String(world);String s3 s1; } 2 在Java中“”引起来的也是String类型对象 // 打印hello字符串(String对象)的长度 System.out.println(hello.length()); 1.2 String对象的比较 字符串的比较是常见操作之一比如字符串排序。Java中总共提供了4中方式 1比较是否引用同一个对象 注意对于内置类型比较的是变量中的值对于引用类型比较的是引用中的地址 public static void main(String[] args) {int a 10;int b 20;int c 10;// 对于基本类型变量比较两个变量中存储的值是否相同System.out.println(a b); // falseSystem.out.println(a c); // true// 对于引用类型变量比较两个引用变量引用的是否为同一个对象String s1 new String(hello);String s2 new String(hello);String s3 new String(world);String s4 s1; //s1和s4引用的是同一对象System.out.println(s1 s2); // falseSystem.out.println(s2 s3); // falseSystem.out.println(s1 s4); // true} 2boolean equals(Object anObject) 方法按照字典序比较 字典序字符大小的顺序 String类重写了父类Object中equals方法Object中equals默认按照比较String重写equals方法后按照如下规则进行比较比如 s1.equals(s2) public boolean equals(Object anObject) {// 1. 先检测this 和 anObject 是否为同一个对象比较如果是返回trueif (this anObject) {return true;}// 2. 检测anObject是否为String类型的对象如果是继续比较否则返回falseif (anObject instanceof String) {// 将anObject向下转型为String类型对象String anotherString (String) anObject;int n value.length;// 3. this和anObject两个字符串的长度是否相同是继续比较否则返回falseif (n anotherString.value.length) {char v1[] value;char v2[] anotherString.value;int i 0;// 4. 按照字典序从前往后逐个字符进行比较while (n-- ! 0) {if (v1[i] ! v2[i])return false;i;}return true;}}return false;} public static void main(String[] args) {String s1 new String(hello);String s2 new String(hello);String s3 new String(Hello);// s1、s2、s3引用的是三个不同对象因此比较结果全部为falseSystem.out.println(s1 s2); // falseSystem.out.println(s1 s3); // false// equals比较String对象中的逐个字符// 虽然s1与s2引用的不是同一个对象但是两个对象中放置的内容相同因此输出true// s1与s3引用的不是同一个对象而且两个对象中内容也不同因此输出falseSystem.out.println(s1.equals(s2)); // trueSystem.out.println(s1.equals(s3)); // false} 3 int compareTo(String s) 方法: 按照字典序进行比较 与equals不同的是equals返回的是boolean类型而compareTo返回的是int类型。具体比较方式 1. 先按照字典次序大小比较如果出现不等的字符直接返回这两个字符的大小差值 2. 如果前k个字符相等(k为两个字符长度最小值)返回值两个字符串长度差值 public static void main(String[] args) {String s1 new String(abc);String s2 new String(ac);String s3 new String(abc);String s4 new String(abcdef);System.out.println(s1.compareTo(s2)); // 不同输出字符差值-1System.out.println(s1.compareTo(s3)); // 相同输出 0System.out.println(s1.compareTo(s4)); // 前k个字符完全相同输出长度差值 -3} 4 int compareToIgnoreCase(String str) 方法与compareTo方式相同但是忽略大小写比较 public static void main(String[] args) {String s1 new String(abc);String s2 new String(ac);String s3 new String(ABc);String s4 new String(abcdef);System.out.println(s1.compareToIgnoreCase(s2)); // 不同输出字符差值-1System.out.println(s1.compareToIgnoreCase(s3)); // 相同输出 0System.out.println(s1.compareToIgnoreCase(s4)); // 前k个字符完全相同输出长度差值 -3} 1.3 字符串查找 方法功能char charAt(int index)返回index位置上字符如果index为负数或者越界抛出IndexOutOfBoundsException异常int indexOf(int ch)返回ch第一次出现的位置没有返回-1int indexOf(int ch, int fromIndex)从fromIndex位置开始找ch第一次出现的位置没有返回-1int indexOf(String str)返回str第一次出现的位置没有返回-1int indexOf(String str, int fromIndex)从fromIndex位置开始找str第一次出现的位置没有返回-1int lastIndexOf(int ch)从后往前找返回ch第一次出现的位置没有返回-1int lastIndexOf(int ch, int fromIndex)从fromIndex位置开始找从后往前找ch第一次出现的位置没有返回-1int lastIndexOf(String str)从后往前找返回str第一次出现的位置没有返回-1int lastIndexOf(String str, int fromIndex)从fromIndex位置开始找从后往前找str第一次出现的位置没有返回-1 public static void main(String[] args) {String s aaabbbcccaaabbbccc;System.out.println(s.charAt(3)); // bSystem.out.println(s.indexOf(c)); // 6System.out.println(s.indexOf(c, 10)); // 15System.out.println(s.indexOf(bbb)); // 3System.out.println(s.indexOf(bbb, 10)); // 12System.out.println(s.lastIndexOf(c)); // 17System.out.println(s.lastIndexOf(c, 10)); // 8System.out.println(s.lastIndexOf(bbb)); // 12System.out.println(s.lastIndexOf(bbb, 10)); // 3 } 1.4转化 1数值和字符串转化 数字转字符串String.valueof( ) 字符串转数字Integer.parestInt (字符串 以转为int类型数据为例 class Student {public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}public String toString() {return name: name age: age;} } public static void main(String[] args) {// 数字转字符串String s1 String.valueOf(1234);String s2 String.valueOf(12.34);String s3 String.valueOf(true);String s4 String.valueOf(new Student(Hanmeimei, 18));System.out.println(s1); //1234System.out.println(s2); //12.34System.out.println(s3); //trueSystem.out.println(s4); //name:Hanmeimei age:18需要重写toString方法否则打印就是Student1b6d3586System.out.println();// 字符串转数字// 注意Integer、Double等是Java中的包装类型这个后面会讲到int data1 Integer.parseInt(1234);double data2 Double.parseDouble(12.34);System.out.println(data1);Sy stem.out.println(data2); } 2大小写转 字符串.toUpperCase() 字符串.toLowerCase() public static void main(String[] args) {String s1 hello;String s2 HELLO;// 小写转大写System.out.println(s1.toUpperCase());// 大写转小写System.out.println(s2.toLowerCase()); } 3字符串转数组 字符串.toCharArray( ) public static void main(String[] args) {String s hello;// 字符串转数组char[] ch s.toCharArray();for(char a : ch) { //遍历数组这样也可以System.out.print(a);}//for (int i 0; i ch.length; i) {// System.out.print(ch[i]);//}System.out.println();// 数组转字符串String s2 new String(ch);System.out.println(s2);} 4格式化 public static void main(String[] args) {String s String.format(%d-%d-%d, 2019, 9,14);System.out.println(s); } //2019-9-141.5  字符串替换 使用一个指定的新的字符串替换掉已有的字符串数据可用的方法如下 方法功能String replaceAll(String regex, String replacement)替换所有的指定内容String replaceFirst(String regex, String replacement)替换首个内容 代码示例: 字符串的替换处理 String str helloworld ; System.out.println(str.replaceAll(l, _)); System.out.println(str.replaceFirst(l, _));//he__owor_d //he_loworld 注意事项: 由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串. 1.6 字符串拆分 可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。可用方法如下 方法功能String[] split(String regex)将字符串全部拆分String[] split(String regex, int limit)将字符串以指定的格式拆分为limit组 代码示例: 实现字符串的拆分处理 String str hello world hello bit ; String[] result str.split( ) ; // 按照空格拆分 for(String s: result) { System.out.println(s); }//hello //world //hello //bit 代码示例: 字符串的部分拆分 String str hello world hello bit ; String[] result str.split( ,2) ; for(String s: result) { System.out.println(s); }//hello //world hello bit 拆分是特别常用的操作. 一定要重点掌握. 另外有些特殊字符作为分割符可能无法正确切分, 需要加上转义. 代码示例: 拆分IP地址 String str 192.168.1.1 ; String[] result str.split(\\.) ; for(String s: result) {System.out.println(s); } 注意事项: 1. 字符‘ . , | , * , 都得加上转义字符前面加上 \\ . 2. 而如果是 \ 那么就得写成 \\\\  第一个和第三个\字符转义转义后是\\这\\中前面一个也是字符转义实际上就一个\) 3. 如果一个字符串中有多个分隔符可以用|作为连字符. 代码示例: 多次拆分注意事项: public static void main(String[] args) {String str namezhangsanage18 ;String[] ret str.split();for (String x: ret) {String[] s x.split();for (String ss: s) {System.out.println(ss);}}}//name //zhangsan //age //18 这种代码在以后的开发之中会经常出现 1.7 字符串截取 从一个完整的字符串之中截取出部分内容。可用方法如下 方法功能String substring(int beginIndex)从指定索引截取到结尾String substring(int beginIndex, int endIndex)截取部分内容 代码示例: 观察字符串截取 String str helloworld ; System.out.println(str.substring(5)); System.out.println(str.substring(0, 5));//world //hello注意事项: 1. 索引从0开始 2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标 (左闭右开 1.8 其他操作方法 方法功能String trim()去掉字符串中的左右空格,保留中间空格String toUpperCase()字符串转大写String toLowerCase()字符串转小写 代码示例: 观察trim()方法的使用 String str hello world ; System.out.println([str]); System.out.println([str.trim()]);//[ hello world ] //[hello world]trim 会去掉字符串开头和结尾的空白字符(空格, 换行, 制表符等). 代码示例: 大小写转换 String str hello%$$%#$%world 哈哈哈 ; System.out.println(str.toUpperCase()); System.out.println(str.toLowerCase());// HELLO%$$%#$%WORLD 哈哈哈 // hello%$$%#$%world 哈哈哈 这两个函数只转换字母 1.9 字符串的不可变性 String是一种不可变对象. 字符串中的内容是不可改变。字符串不可被修改是因为 1. String类在设计时就是不可改变的String类实现描述中已经说明了 以下来自JDK1.8中String类的部分实现 String类中的字符实际保存在内部维护的value字符数组中该图还可以看出 1. String类被final修饰表明该类不能被继承 2. value被修饰被final修饰表明value自身的值不能改变即不能引用其它字符数组但是其引用空间中的内容可以修改。 2. 所有涉及到可能修改字符串内容的操作都是创建一个新对象改变的是新对象 比如 replace 方法 【纠正】网上有些人说字符串不可变是因为其内部保存字符的数组被final修饰了因此不能改变。这种说法是错误的不是因为String类自身或者其内部value被final修饰而不能被修改。 final修饰类表明该类不想被继承final修饰引用类型表明该引用变量不能引用其他对象但是其引用对象中的内容是可以修改的。 public static void main(String[] args) {final int array[] {1,2,3,4,5};array[0] 100;System.out.println(Arrays.toString(array));// array new int[]{4,5,6}; // 编译报错Error:(19, 9) java: 无法为最终变量array分配值 } 为什么 String 要设计成不可变的?(不可变对象的好处是什么?) (选学) 1. 方便实现字符串对象池. 如果 String 可变, 那么对象池就需要考虑写时拷贝的问题了. 2. 不可变对象是线程安全的. 3. 不可变对象更方便缓存 hash code, 作为 key 时可以更高效的保存到 HashMap 中 那如果想要修改字符串中内容该如何操作呢 1.10字符串修改 注意尽量避免直接对String类型对象进行修改因为String类是不能修改的所有的修改都会创建新对象效率非常低下 public static void main(String[] args) {String s hello;s world;System.out.println(s); // 输出hello world } 但是这种方式不推荐使用因为其效率非常低中间创建了好多临时对象 public static void main(String[] args) {long start System.currentTimeMillis();String s ;for(int i 0; i 10000; i){s i;} long end System.currentTimeMillis();System.out.println(end - start);start System.currentTimeMillis();StringBuffer sbf new StringBuffer();for(int i 0; i 10000; i){sbf.append(i);} end System.currentTimeMillis();System.out.println(end - start);start System.currentTimeMillis();StringBuilder sbd new StringBuilder();for(int i 0; i 10000; i){sbd.append(i);}end System.currentTimeMillis();System.out.println(end - start);} 可以看待在对String类进行修改时效率是非常慢的因此尽量避免对String的直接需要如果要修改建议尽量使用StringBuffer或者StringBuilder。 b. 借助StringBuffer 和 StringBuilder 二、 StringBuilder和StringBuffer 2.1 StringBuilder的介绍 由于String的不可更改特性为了方便字符串的修改Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的这里介绍 StringBuilder常用的一些方法 方法说明StringBuff append(String str)在尾部追加相当于String的可以追加boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量char charAt(int index)获取index位置的字符int length()获取字符串的长度int capacity()获取底层保存字符串空间总的大小void ensureCapacity(int mininmumCapacity)扩容void setCharAt(int index, char ch)将index位置的字符设置为chint indexOf(String str)返回str第一次出现的位置int indexOf(String str, int fromIndex)从fromIndex位置开始查找str第一次出现的位置int lastIndexOf(String str)返回最后一次出现str的位置int lastIndexOf(String str, int fromIndex)从fromIndex位置开始找str最后一次出现的位置StringBuff insert(int offset, String str)在offset位置插入八种基类类型 String类型 Object类型数据StringBuffer deleteCharAt(int index)删除index位置字符StringBuffer delete(int start, int end)删除[start, end)区间内的字符StringBuffer replace(int start, int end, String str)将[start, end)位置的字符替换为strString substring(int start)从start开始一直到末尾的字符以String的方式返回String substring(int startint end)将[start, end)范围内的字符以String的方式返回StringBuffer reverse()反转字符串String toString()将所有字符按照String的方式返回 public static void main(String[] args) {StringBuilder sb1 new StringBuilder(hello);StringBuilder sb2 sb1;// 追加即尾插--字符、字符串、整形数字sb1.append( ); // hellosb1.append(world); // hello worldsb1.append(123); // hello world123System.out.println(sb1); // hello world123System.out.println(sb1 sb2); // trueSystem.out.println(sb1.charAt(0)); // 获取0号位上的字符 hSystem.out.println(sb1.length()); // 获取字符串的有效长度14System.out.println(sb1.capacity()); // 获取底层数组的总大小sb1.setCharAt(0, H); // 设置任意位置的字符 Hello world123sb1.insert(0, Hello world!!!); // Hello world!!!Hello world123System.out.println(sb1);System.out.println(sb1.indexOf(Hello)); // 获取Hello第一次出现的位置System.out.println(sb1.lastIndexOf(hello)); // 获取hello最后一次出现的位置sb1.deleteCharAt(0); // 删除首字符sb1.delete(0,5); // 删除[0, 5)范围内的字符String str sb1.substring(0, 5); // 截取[0, 5)区间中的字符以String的方式返回System.out.println(str);sb1.reverse(); // 字符串逆转str sb1.toString(); // 将StringBuffer以String的方式返回System.out.println(str);} 从上述例子可以看出String和StringBuilder最大的区别在于String的内容无法修改而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。 注意String和StringBuilder类不能直接转换。如果要想互相转换可以采用如下原则: String变为StringBuilder: 利用StringBuilder的构造方法或append()方法 StringBuilder变为String: 调用toString()方法 2.2面试题 1. String、StringBuffer、StringBuilder的区别 1String的内容不可修改StringBuffer与StringBuilder的内容可以修改. 2StringBuffer与StringBuilder大部分功能是相似的 3StringBuffer采用同步处理属于线程安全操作而StringBuilder未采用同步处理属于线程不安全操作 本次内容就到此啦欢迎评论区或者私信交流觉得笔者写的还可以或者自己有些许收获的麻烦铁汁们动动小手给俺来个一键三连万分感谢 !
http://www.yutouwan.com/news/2268/

相关文章:

  • 合肥环保公司网站建设如何介绍自己的网页设计
  • 淮安哪个做网站好点网站如何建立
  • 数字广东网络建设有限公司总经理排名轻松seo 网站
  • 广东省企业诚信建设促进会网站企业网站建设文档
  • 二级目录做网站便宜的域名
  • 公司网站建设外包建筑建设规范网站
  • 深圳网站建设ue四川网站建设哪家专业
  • 工装效果图网站太原铁路建设有限公司网站
  • 做网站在哪里租服务器wordpress ajax 流量统计
  • 城阳做网站的网站推广的一般方式
  • pe管网站建设 中企动力阜阳恒亮做网站多少钱
  • 网站建设与制作外包服务信息服务平台有哪些网站
  • 建网站的宽带多少钱做网站需要哪些技术人才
  • 佛山做网站公司排名济南润滑油网站制作
  • 做网站现在什么最赚钱吗建设个直播网站要多少钱
  • 设计师必去十大网站wix和wordpress区别
  • 哪家网站建设比较好WordPress云媒体库
  • 惠州网站建设怎么样三牛网站建设
  • 网站出问题做门户网站的公司有哪些
  • 北京做网站一般多少钱分销网站有哪些
  • 单页响应式网站模板php网站开发基础教程
  • 建设网站盈利2015外贸企业网站对外贸的重要性
  • 如何把网站能搜到天津的网站建设公司哪家好
  • 烦恼可以做网站吗安全网站开发
  • 点餐网站模板 手机端在手机上做游戏的软件
  • 网站被管理员权限vs2010怎么做网站
  • 湛江企业自助建站系统wordpress 结构化数据库
  • 网站建设名列前茅wordpress 新建模板文件夹
  • 网站免费做招生宣传网络营销优化公司
  • 如何做的网站手机可以用吗网页设计如何收费