网站方案模板,众创空间那个网站做的好,logo在线制作免费网站,上海网页设计公司济南兴田德润团队怎么样一、String 类常用方法
1、构造方法 常用的这4种构造方法#xff1a;直接法#xff0c;或者传参字符串字面量、字符数组、字节数组。 在 JDK1.8 中#xff0c;String 类的字符串实际存储在 char 数组中#xff1a; String 类也重写了 toString 方法#xff0c;所以可以直…一、String 类常用方法
1、构造方法 常用的这4种构造方法直接法或者传参字符串字面量、字符数组、字节数组。 在 JDK1.8 中String 类的字符串实际存储在 char 数组中 String 类也重写了 toString 方法所以可以直接打印 String 类打印效果就是字符串而非 classNamehashCode 的形式 可以看到源码中重写的 toString 直接返回的 this因为 this 本身就是字符串类println 会对 String 类进行处理打印出字符串 length() 方法可以获取字符串长度这区别于数组通过属性 length 获取长度。 2、字符串的比较包含字符串常量池 在前面学习 equals 和 compareTo 方法时知道直接使用 比较比较的是对象的地址而非对象的内容 但通过两种构造方式得到的 String 类比较的结果却不同它们存在区别
法1① 字符串常量池不存在hello对象 在常量池创建hello对象 在堆上创建hello对象 在栈上创建 s1 引用存放堆上对象地址。② 字符串常量池存在hello对象 直接在堆上创建hello对象 在栈上创建 s2 引用存放堆上对象地址。 法2① 字符串常量池不存在hello对象 在常量池创建hello对象 在栈上创建 s3 引用存放常量池上对象地址。② 字符串常量池存在hello对象 在栈上创建 s4 引用存放常量池上对象地址。 因此法1得到 false法2得到 true。由此可见将频繁使用的字符串存到字符串常量池能够提高性能和减少内存开销。参考博客深入理解Java字符串常量池 | 二哥的Java进阶之路 如果想将 new String(hello) 也存放到字符串常量池中可手动地使用 intern 方法 回到比较如果想比较对象的内容使用 equals 和 compareTo 方法。还有 equalsIgnoreCase 和 compareToIgnoreCase 方法可忽略字母大小写 3、字符串查找 查找失败时除了 charAt 抛出异常其它方法都是返回 -1。 4、字符串转换
1 整数、浮点数、布尔值、对象、数组 字符串 2字符串 整数、浮点数、数组 3大小写转换 4格式化转换 5、字符串替换 6、字符串拆分 注正则表达式中
*、、| 有特殊含义需要加上 \\。\ 在 java 中要用 \\ 表示在正则表达式中也有特殊含义最后为\\\\。正则表达式中| 表示连字符可连接多个分隔符。
7、字符串截取 8、字符串的不可变性 题外话Java 中的引用就是 C语言指针的改版存的是对象的地址但是它更安全因为只允许 和 . 操作除了数组还有[ ] 操作所以简单又不易出错。 从 String 类的注释中可以看到字符串是常量它的值不可修改 String 类的内容是怎么做到不可修改的呢有人说是因为 final但并不是 修饰类的 final 表示 String 类不可继承修饰 value 的 final 表示这个数组引用不可修改并不是引用指向的内容不可修改。 value 引用指向的字符串内容不可修改的原因
value 数组由 private 修饰。String 类没有向外部提供修改 value 指向的对象的方法。 字符串不可修改的缺点每次修改字符串其实是创建一个新的对象效率低。 字符串不可修改的优点
在多线程中使用 String 类更安全。线程以后学习方便储存在常量池。如果常量池中的字符串可修改则会造成多个引用的变化。方便将固定 hashCode 存储在哈希表中。哈希表以后学习
二、可修改的字符串StringBuilder和StringBuffer
String 不可修改字符串内容而 StringBuilder 和 StringBuffer 可修改字符串内容。StringBuilder 和 StringBuffer 的功能大致相同最大的不同是StringBuffer 提供了 synchronized 操作能够保证线程安全。详情以后学习 1、String 和 StringBuilder 的对比以及 append 方法 可以看到当需要频繁修改字符串时使用 StringBuilder 的效率要高很多因为它不需要频繁创建新的对象。每次 都会将旧的 s 对象自动销毁所以大的不是空间开销而是创建对象的时间开销。
2、capacity 和 ensureCapacity 当用 StringBuilder 创建可修改的字符串对象时实际会申请比初始化的字符串更大的空间capacity 方法就是获取实际的空间大小 当字符串容量不够时StringBuilder 会自动扩容有时为了防止频繁扩容造成时间开销的增加会使用 ensureCapacity 提前手动设置好比较大的字符串容量 三、String 类练习题
1、387. 字符串中的第一个唯一字符 - 力扣LeetCode 思路统计每种字母的个数找到第一个个数为 1 的字母。
class Solution {public int firstUniqChar(String s) {int[] cnt new int[256];// 统计每种字符个数for(int i 0; i s.length(); i)cnt[s.charAt(i)];// 找到第一个唯一的字符for(int i 0; i s.length(); i)if(cnt[s.charAt(i)] 1)return i;// 未找到return -1;}
}
2、字符串最后一个单词的长度_牛客题霸_牛客网 思路找到最后一个空格位置根据空格位置裁剪出最后一个单词获取长度。
import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseString s in.nextLine();int index s.lastIndexOf( ); // 找到最后一个空格String lastWord s.substring(index 1, s.length()); // 裁剪出最后一个单词System.out.println(lastWord.length());}}
}
3、125. 验证回文串 - 力扣LeetCode 思路先大写转小写前、后设置一个标记移动跳过非字母数字字符匹配。
class Solution {// 判断小写字母和数字public boolean isValidChar(char ch) {if((ch a ch z) || (ch 0 ch 9))return true;elsereturn false;}public boolean isPalindrome(String s) {// 大写转小写s s.toLowerCase();int i 0, j s.length() - 1;// 前、后移动while(i j){// 前、后跳过所有其它字符直到遇到小写字母和数字停止while(!isValidChar(s.charAt(i)) i j) i;while(!isValidChar(s.charAt(j)) i j) j--;// 存在不匹配则否if(s.charAt(i) ! s.charAt(j)) return false;// 匹配则更新i、ji;j--;}return true;}
}
四、补充 -- FittenCode 插件 它是一个AI功能可以预测你要写的代码还能根据项目的内容对它提问