2026/4/10 12:34:15
网站建设
项目流程
网上商城网站建设规划,asp.net网站开发项目化教程,深圳市网站制作公司,软件定制公司1. String 概述核心概念Java API#xff1a;Java 提供的一套预定义类和接口#xff0c;可以直接使用String 类#xff1a;java.lang.String 代表字符串#xff0c;程序中所有字符串字面值都是该类的对象重要特性#xff1a;String 对象是不可变的#xff08;immutableJava 提供的一套预定义类和接口可以直接使用String 类java.lang.String代表字符串程序中所有字符串字面值都是该类的对象重要特性String 对象是不可变的immutable创建后内容不能修改2. 创建 String 对象的四种方式方式1直接赋值最常用java// 语法String 变量名 字符串内容; String str1 Hello World; String str2 Java; String emptyStr ; // 空字符串 // 特点会检查字符串池如果已存在则复用 String s1 abc; String s2 abc; // s1 和 s2 指向同一个对象 System.out.println(s1 s2); // true地址相同方式2new String() 构造方法java// 1. 创建空白字符串 String str1 new String(); // 等价于 System.out.println(str1); // 输出空字符串 System.out.println(str1.length()); // 输出0 // 2. 根据已有字符串创建 String original Hello; String str2 new String(original); // 创建新的String对象内容为Hello // 3. 根据字符数组创建 char[] charArray {J, a, v, a}; String str3 new String(charArray); // Java String str4 new String(charArray, 0, 2); // 从索引0开始取2个字符Ja // 4. 根据字节数组创建常用于网络传输、文件读写 byte[] byteArray {65, 66, 67, 68}; // ASCII: A, B, C, D String str5 new String(byteArray); // ABCD // 指定字符集 try { byte[] bytes 你好.getBytes(UTF-8); String str6 new String(bytes, UTF-8); // 你好 } catch (Exception e) { e.printStackTrace(); }3. String 类的常用方法长度和空值判断javaString str Hello Java; // 获取长度 int length str.length(); // 10 // 判断是否为空 boolean isEmpty str.isEmpty(); // false boolean isEmpty2 .isEmpty(); // true // 判断是否为空白包含空格、制表符等 boolean isBlank .isBlank(); // trueJava 11字符串比较javaString s1 abc; String s2 abc; String s3 new String(abc); String s4 ABC; // 使用 比较比较地址 System.out.println(s1 s2); // true System.out.println(s1 s3); // falses3在堆内存中 // 使用 equals() 比较比较内容 System.out.println(s1.equals(s2)); // true System.out.println(s1.equals(s3)); // true System.out.println(s1.equals(s4)); // false区分大小写 // 忽略大小写比较 System.out.println(s1.equalsIgnoreCase(s4)); // true // 比较字符串字典顺序 System.out.println(abc.compareTo(abd)); // -1小于 System.out.println(abc.compareTo(abc)); // 0等于 System.out.println(abd.compareTo(abc)); // 1大于字符串查找javaString str Hello Java World; // 查找字符/字符串位置 int index1 str.indexOf(J); // 6第一个J的位置 int index2 str.indexOf(Java); // 6 int index3 str.indexOf(a, 7); // 8从索引7开始查找 // 从后往前查找 int lastIndex str.lastIndexOf(o); // 13 // 是否包含 boolean contains str.contains(Java); // true // 是否以指定字符串开始/结束 boolean startsWith str.startsWith(Hello); // true boolean endsWith str.endsWith(World); // true字符串截取和替换javaString str Hello Java World; // 截取子串 String sub1 str.substring(6); // Java World从索引6到结尾 String sub2 str.substring(6, 10); // Java从6到9不包含10 // 替换 String replaced1 str.replace(o, O); // HellO Java WOrld String replaced2 str.replace(Java, Python); // Hello Python World // 替换所有正则表达式 String replaced3 str.replaceAll(\\s, -); // 将所有空白替换为-字符串分割和连接java// 分割字符串 String str apple,banana,orange; String[] fruits str.split(,); // [apple, banana, orange] // 复杂分割正则表达式 String complex apple, banana; orange; String[] result complex.split([,\\s;]); // 按逗号、空格、分号分割 // 连接字符串 String joined String.join(-, Java, Python, C); // Java-Python-C大小写转换和去除空白javaString str Hello Java ; // 大小写转换 String upper str.toUpperCase(); // HELLO JAVA String lower str.toLowerCase(); // hello java // 去除首尾空白 String trimmed str.trim(); // Hello Java // 去除首尾空白包含Unicode空白符 String stripped str.strip(); // Hello JavaJava 11其他常用方法javaString str Java; // 获取指定位置的字符 char ch str.charAt(2); // v // 转换为字符数组 char[] chars str.toCharArray(); // [J, a, v, a] // 转换为字节数组 byte[] bytes str.getBytes(); // 使用平台默认编码 // 格式化字符串 String formatted String.format(姓名%s年龄%d, 张三, 25); // 重复字符串 String repeated Java .repeat(3); // Java Java Java Java 114. String 的不可变性不可变性的表现javaString s1 Hello; String s2 s1; // s1和s2指向同一个对象 s1 s1 World; // 创建新的String对象 System.out.println(s1); // Hello World System.out.println(s2); // Hellos2不受影响不可变性的好处线程安全无需同步缓存哈希值提高性能字符串池节省内存安全性防止被修改5. 字符串常量池内存机制java// 情况1直接赋值使用常量池 String s1 abc; // 检查常量池如果不存在则创建 String s2 abc; // 复用常量池中的对象 System.out.println(s1 s2); // true // 情况2new String()在堆内存创建新对象 String s3 new String(abc); String s4 new String(abc); System.out.println(s3 s4); // false System.out.println(s1 s3); // false // 情况3intern()方法手动入池 String s5 s3.intern(); // 将s3的内容放入常量池 System.out.println(s1 s5); // true6. 性能优化建议避免使用 连接大量字符串java// 错误做法创建多个临时对象 String result ; for (int i 0; i 1000; i) { result i; // 每次循环创建新的String对象 } // 正确做法使用StringBuilder StringBuilder sb new StringBuilder(); for (int i 0; i 1000; i) { sb.append(i); } String result sb.toString();7. 实际应用示例示例1用户输入验证javaimport java.util.Scanner; public class StringDemo { public static void main(String[] args) { Scanner scanner new Scanner(System.in); System.out.print(请输入用户名); String username scanner.nextLine().trim(); // 验证用户名 if (username.isEmpty()) { System.out.println(用户名不能为空); } else if (username.length() 3) { System.out.println(用户名至少3个字符); } else if (!username.matches([a-zA-Z0-9_])) { System.out.println(用户名只能包含字母、数字和下划线); } else { System.out.println(用户名有效 username); } } }示例2文件路径处理javapublic class FilePathDemo { public static void main(String[] args) { String filePath C:/Users/User/Documents/test.txt; // 获取文件名 int lastSlash filePath.lastIndexOf(/); String fileName filePath.substring(lastSlash 1); System.out.println(文件名 fileName); // test.txt // 获取文件扩展名 int dotIndex fileName.lastIndexOf(.); if (dotIndex 0) { String extension fileName.substring(dotIndex 1); System.out.println(扩展名 extension); // txt } // 获取文件路径 String directory filePath.substring(0, lastSlash); System.out.println(目录 directory); // C:/Users/User/Documents } }