常用类 String
概述
-
字符串是常量,创建之后,不可改变
-
字符串字面值存储在字符串池中(方法区),可以共享。
-
String s = "hello";
// 产生一个对象,字符串池中存储。String name = "hello"; // "hello"常量存储在字符串常量池中 name ="张三"; // 此时并没有改变 hello,而是在字符串池中,重新开辟一个空间,hello 被当做垃圾回收 String name2 = "张三"; // 此时,并没有重新开辟一个空间,而是在字符串常量池中,找 "张三" 存在不?,存在的话,直接指向存在的字符串,这样就实现了,共享 // 当我们修改字符串的时候,不会直接修改,而是在字符串常量池中,重新开辟一个空间, // 当我们创建一个字符串的时候,会在字符串常量池中,找 "张三" 存在不?,存在的话,直接指向存在的字符串,这样就实现了,共享,不存在的话,再在字符串常量池中开辟一个空间
-
String s = new String("hello");
// 产生两个对象,堆,池,各存储一个// 字符串的另一种创建方式 , new String(); String str = new String("人生无常"); String str2 = new String("人生无常"); System.out.println(str == str2); // false // String 重写了 equals 方法 ,所以可以得到 我们想要的答案 System.out.println(str.equals(str2)); // true
常用方法
public int length();
// 返回字符串的长度public char charAt(int index);
// 根据下标获取字符public boolean contains(String str);
//判断当前字符串中是否包含 strpublic char[] toCharArray();
// 将字符串转换成数组public int indexOf(String str);
// 查找 str 首次出现的下标,存在,则返回该下标;public int lastIndexOf(String str);
// 查找字符串在当前字符串中最后一次出现的下标索引public String trim();
// 去掉字符串前后的空格pubic String toUpperCase();
// 将小写转换成大写toLowerCase();
大 转 小public boolean endWith(String str);
// 判断字符串是否以 str 结尾public String replace(char oldChar,char newChar);
// 将旧字符串替换成新字符串,返回新的字符串public String[] split(String str);
// 根据 str 做拆分
public static void main(String[] args) {
String name = "hello"; // "hello"常量存储在字符串常量池中
name = "张三"; // 此时并没有改变 hello,而是在字符串池中,重新开辟一个空间,hello 被当做垃圾回收
String name2 = "张三"; // 此时,并没有重新开辟一个空间,而是在字符串常量池中,找 "张三" 存在不?,存在的话,直接指向存在的字符串,这样就实现了,共享
// 当我们修改字符串的时候,不会直接修改,而是在字符串常量池中,开辟一个空间,创建一个字符串的时候,
// 在字符串常量池中,找 "张三" 存在不?,存在的话,直接指向存在的字符串,这样就实现了,共享
// 字符串的另一种创建方式 , new String();
String str = new String("人生无常");
String str2 = new String("人生无常");
System.out.println(str == str2); // false
// String 重写了 equals 方法 ,所以可以得到 我们想要的答案
System.out.println(str.equals(str2)); // true
// 字符串方法的使用
String content = "li人生li无常li";
// 1. public int length(); ` // 返回字符串的长度
System.out.println(content.length()); // 空格也算一个字符
// 2. public char charAt(int index); ` // 根据下标获取字符
System.out.println(content.charAt(content.length() - 1)); // 返回:常 从 0 开始的,不能超出字符串下标
// 3. public boolean contains(String str); ` //判断当前字符串中是否包含 str
System.out.println(content.contains("人")); // true
// 4. public char[] toCharArray (); ` // 将字符串转换成数组
System.out.println(Arrays.toString(content.toCharArray()));
// 5. public int indexOf (String str); ` // 查找 str 首次出现的下标,存在,则返回该下标;
System.out.println(content.indexOf("li"));
System.out.println(content.indexOf("li", 4));
// 6. public int lastIndexOf (String str); ` // 查找字符串在当前字符串中最后一次出现的下标索引
System.out.println(content.lastIndexOf("li"));
String content2 = " hello world ";
// 7. public String trim();` // 去掉字符串前后的空格
System.out.println(content2.trim());
// 8. pubic String toUpperCase();` // 将小写转换成大写 ` toLowerCase();`大 转 小
System.out.println(content2.toLowerCase());
System.out.println(content2.toUpperCase());
// 9. public boolean endWith(String str);` // 判断字符串是否以 str 结尾
String filename = "hello.java";
System.out.println(filename.endsWith(".java")); // 以什么字符串结尾
System.out.println(filename.startsWith("hello")); // 以什么字符串开始
// 10 . replace(char oldChar,char newChar); 用新的字符或字符串替换旧的字符或字符串
System.out.println(content.replace("人生", "黑白"));
// 11. split(String str);
String say = "java is the best programing,java language";
String[] s = say.split("[ ,]+"); // 以空格 拆分
// String[] split = say.split("[ ,]"); // 以空格和 , 进行拆分
//String[] split1 = say.split("[ ,]+"); // 以一个或者多个空格拆分
System.out.println(s.length);
for (String s1 : s) {
System.out.println(s1);
}
// 补充两个方法 equals() ,compareTo() ; 比较大小
String s1 = "hello";
String s2 = "HELLO";
System.out.println(s1.equalsIgnoreCase(s2)); // 忽略大小写比较
String s3 = "abc";
String s4 = "abc";
System.out.println(s3.compareTo(s4)); // 0 不同字符串,返回的是差,s3-s4 相同返回0
}
}
String 常用方法案例
需求:
- 已知
String str = "this is a text";
- 将 str 中的单词单独获取出来
- 将 str 中的text 替换为 practice
- 在 text 前面插入一个 easy
- 将每个单词的首字母改为大写
/*
* 案例
* */
public class Demo02 {
public static void main(String[] args) {
String str = "this is a text";
// 1. 将 str 中的单词单独获取出来
String[] s = str.split(" ");
for (String s1 : s) {
System.out.println(s1);
}
// 2. 将 str 中的text 替换为 practice
System.out.println(str.replace("text", "practice"));
// 3. 在 text 前面插入一个 easy
System.out.println(str.replace("text", "easy text"));
// 4. 将每个单词的首字母改为大写
for (int i = 0; i < s.length; i++) {
char first = s[i].charAt(0);
// 把第一个字符转成大写
char c = Character.toUpperCase(first);
// 将 first 和 剩余的字母拼接起来
System.out.println(c + s[i].substring(1));
}
}
}
可变长字符串
功能增强类:
- StringBuffer:可变长字符串,JDK1.0,运行效率慢,线程安全。(正是因为它是安全的,所以它要比 StringBuilder 慢一点,但是还是要比 String 要快一点。)
- StringBuilder:可变长字符串,JDK5.0,运行效率快,线程不安全。
二者功能完全一样,单线程的情况下,用 stringBuilder 就可以了。
如何使用呢?
/*
* StringBuilder 和 StringBuffer
*
* 和 String 的区别:
* (1)效率比 String 高
* (2)比 String 节省内存
* */
public class Demo03 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
// 1.append (); 追加
sb.append("java 语言");
System.out.println(sb);
sb.append("java 语言");
System.out.println(sb);
// 2 insert(); 追加
sb.insert(0,"我在最前面,");
System.out.println(sb);
// 3 replace(); 替换
sb.replace(0,5,"hello");
System.out.println(sb);
// 4 delete(); 删除
sb.delete(0,5);
System.out.println(sb);
// 清空
sb.delete(0,sb.length());
System.out.println(sb);
}
}
验证 StringBuilder 效率高于 String
/*
* 验证 StringBuilder 效率高于 String
* */
public class Demo04 {
public static void main(String[] args) {
// 开始时间
long start = System.currentTimeMillis();
// String string = "";
// for (int i = 0; i < 40000; i++) {
// string+=i;
// }
// System.out.println(string);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 999999; ++i) {
sb.append(i);
}
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start)); // String 用时:7118 ms StringBuilder 用时:21
}
}
本文来自博客园,作者:走马!,转载请注明原文链接:https://www.cnblogs.com/zou-ma/p/16188197.html
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术