字符串练习
java17版本
1.1字符串常见操作
1 package com; 2 //字符串练习 3 //熟悉字符串常用操作 4 //StringBuilder 5 //StringBuffer 6 7 import java.io.UnsupportedEncodingException; 8 import java.nio.charset.StandardCharsets; 9 import java.util.Arrays; 10 import java.util.Calendar; 11 import java.util.Locale; 12 13 public class testString { 14 public static void test1() { 15 16 //1 字符串两种赋值,以及两种运算。 17 //方式1.共用地址 18 //字符串常量 对应静态常量池地址 19 //1.静态:1.共用地址(唯一,和普通静态常量一样)2可以回收(不同于普通静态常量) 20 //2.常量:初始化后不能改变 21 String s1 = "ok";//常量池里面 new了一个“OK”静态常量 22 //方式2.拷贝 23 //字符串 对应堆的地址, 24 String s2 = new String("ok");//堆里面 new了一个“OK”变量 25 26 //二者运算有点不同。 27 //一个是在栈里面 28 //一个在常量池中 29 System.out.println(s1 == s1 + "");//false 堆里面新new的 30 System.out.println(s1 == "ok" + "");//true 常量池里面的OK 31 //==比较的是地址,地址一样的值一定一样。 32 //equals()比较的是值-- 33 //地址决定原理,大多时候应该是值判断 34 35 //2 """ """字符串 36 String s3 = """ 37 张三 38 李四 39 王五 40 """; 41 System.out.println(s3); 42 43 //3java转义字符 44 // 标志:\+字符,如 \n \t(table), \b(backspace) \" 45 //其它还有 \a , \f, \r ,\v(垂直制表) , \\, \u4e00 \u9fa5等 46 //注意:非转义字符,写了会报错,如"\m" 47 48 String s4 = "\n张三"; 49 System.out.println(s4); 50 51 52 53 //4不区分大小写 54 System.out.println("ABC".equalsIgnoreCase("abc")); 55 56 57 //5.字符串格式化 58 System.out.println(String.format("欢迎:\"%s\"。","张三")); 59 //对比记忆 60 //%是格式输出标志 61 System.out.printf("欢迎:\"%s\"。%n","张三"); 62 } 63 64 //字符串其它常用操作 65 public static void test2() { 66 //1.字符串长度,字符串字节个数 67 String s1 = "ok中国人"; 68 //获取字符串字符个数 69 System.out.println(s1.length()); 70 //获取字符字节(byte)个数 71 //UTF-8编码,一个中文字符是3个字节,一个英文字符是1个字节 72 System.out.println(s1.getBytes(StandardCharsets.UTF_8).length);// 73 //字符串内部每个字符就是字节存储 74 75 //将字符串重新编码成另一种格式 76 //出现乱码总是不能正确将一种编码换成另一种 77 try { 78 String s2 = new String("张三".getBytes("GBK"), "UTF-8"); 79 System.out.println(s2); 80 System.out.println(s2.length()); 81 System.out.println(s2.getBytes("GBK").length); 82 } catch (UnsupportedEncodingException e) { 83 throw new RuntimeException(e); 84 } 85 86 87 //2 trim()清除空格 88 System.out.println("--------------------2-----------------------"); 89 //空格 换行 制表位都是空格 90 s1 = "\t \s hello world\n"; 91 String s2 = s1; 92 System.out.print(s1 + "长度:"); 93 System.out.print(s1.length() + "."); 94 System.out.print(s1.trim() + "长度"); 95 System.out.println(s1.trim().length() + "."); 96 97 s1.replace("hello", "Hello"); 98 System.out.println(s2); 99 System.out.println(s1); 100 System.out.println(s2 == s1); 101 102 //3 replace “替换” 103 System.out.println("--------------------3-----------------------"); 104 //replace 没有改变原来字符串 105 //replace是将替代的字符串作为参数返回了。 106 s1 = "java java java"; 107 System.out.println(s1.replace("java", "j")); 108 System.out.println(s1.replaceAll("java", "j")); 109 System.out.println(s1.replaceFirst("java", "j")); 110 System.out.println(s1.replace('j', 'J'));//支持字符 111 // System.out.println(s1.replaceFirst('j','J'));//不支持字符 112 // System.out.println(s1.replaceAll('j','J'));//不支持字符 113 114 //replace支持字符,字符串 115 //replaceFirst和replaceAll支持字符串,正则表达式 116 117 //注意: 118 //正则表达式也兼容普通字符串查找 119 //正则表达式检索功能强但是效率相对低,耗费更多资源,能不用正则表达式解决的就不用 120 //所以若没有用正则表达式,就用replace代替replaceAll 121 122 System.out.println("--------------------4-----------------------"); 123 //4 repeat重复拷贝几遍返回 124 System.out.println(s1.repeat(2)); 125 126 //5 split() 127 // 参数是正则表达式 128 // 返回一个String[]数组 129 System.out.println("--------------------5-----------------------"); 130 System.out.println(s1); 131 String[] strs = s1.split(""); 132 //空白分割效果,将每个字符都分割 133 System.out.println(Arrays.toString(strs));//[j, a, v, a, , j, a, v, a, , j, a, v, a] 134 //分割符默认用,代替。 135 System.out.println(Arrays.toString(s1.split("a", 3)));//[j, v, j, v, j, v] 136 //可以设置,分割的字符数量 分割字符数量= limit-1 是一个正整数 137 //最大是0 最小是1 138 139 //6 charAt() 返回某个下标位置上的字符 140 System.out.println("--------------------6-----------------------"); 141 System.out.println(s1.charAt(1)); 142 143 //7 concat() 字符串连接 144 System.out.println("--------------------7-----------------------"); 145 int k = (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) + 6) % 7; 146 System.out.println("星期" + "日一二三四五六".charAt(k)); 147 System.out.println("星期".concat("1")); 148 149 //8 拷贝字符串成一个字符数组 toCharArray() 150 System.out.println("--------------------8-----------------------"); 151 char[] ch1 = s1.toCharArray(); 152 System.out.println(Arrays.toString(ch1)); 153 154 //9 检查字符串是否包含某个字符串 contains() 155 System.out.println("--------------------9-----------------------"); 156 System.out.println(s1.contains("java")); 157 158 //10 找字符串中某个字符/字符串的位置 159 160 System.out.println("--------------------10-----------------------"); 161 s1 = "abc张三"; 162 //找'张'字符位置 163 System.out.println("张位置是" + s1.indexOf('张')); 164 // 参数类型是int, 存在自动类型转换 165 //找字符串“张三”位置 166 System.out.println("张三位置是" + s1.indexOf("张三")); 167 //从第3位置(包含3)开始找"张三"位置,知道前面没有 168 System.out.println("张三位置是" + s1.indexOf("张三", 3)); 169 //从后往前边找 170 System.out.println("张三位置是" + s1.lastIndexOf("张三", 1)); 171 //-1 没有找到返回值是-1 172 //不论从前往后还是从后往前,元素下标不变 173 174 //11 截取子串 175 System.out.println("--------------------11-----------------------"); 176 177 //定位+截子串 178 s1 = "pic.jpg"; 179 System.out.println("d:\\user\\shop\\pic\\"+"20220619"+s1.substring(s1.lastIndexOf("."))); 180 //注意,截取结果包含了. 181 182 //截取2 183 // [ ,) 184 System.out.println(s1.substring(2,s1.lastIndexOf(".")));//c 后面不包含 185 186 //总结: 187 // 返回值都是拷贝的字符串,不是原来的 188 // 查找都是从0开始,返回值 -1表示没有找到 189 // java范围都是左边包含,右边不包含 [,) 190 191 //12以什么开始,和以什么结尾 192 // endsWith() 193 // startsWith() 194 System.out.println("--------------------12-----------------------"); 195 s1 = "abcd "; 196 System.out.println(s1.startsWith("ab"));//true 197 System.out.println(s1.endsWith("cd"));//false 198 199 200 //13 isBlank() 字符串是否为空 201 System.out.println("--------------------13-----------------------"); 202 System.out.println("".isBlank()); 203 System.out.println(" ".isBlank()); 204 System.out.println("\n".isBlank()); 205 System.out.println("\t".isBlank()); 206 207 208 //14转变为大写/小写 209 //toLowerCase()小写 210 //toUpperCase()大写 211 System.out.println("--------------------14-----------------------"); 212 s1 = "Java"; 213 System.out.println(s1.toLowerCase()); 214 System.out.println(s1.toUpperCase()); 215 216 //总结: 217 // 返回值都是拷贝的字符串,不是原来的 218 // 查找都是从0开始,返回值 -1表示没有找到 219 // java范围都是左边包含,右边不包含 [,) 220 } 221 222 //字符串不能修改 223 public static void test3() { 224 225 String s1 = "张三"; 226 String s2 = s1; 227 //拷贝了一个新的字符数组给字符数组 228 char[] chars = s1.toCharArray(); 229 System.out.println(s1); 230 chars[0] = '流'; 231 System.out.println(s1); 232 233 // s1 = char;//不能直接共用地址, 234 s1 = new String(chars);//重新new了一个,也就是拷贝 235 System.out.println(s1); 236 chars[0] = '李'; 237 System.out.println(s1); 238 239 //总结本身字符串就是固定的 240 //不能修改,删除,添加 241 } 242 243 public static void main(String[] args) { 244 // test1();//字符串基本操作 245 test2();//其它操作 246 // test3(); 247 } 248 }
1.2 switch 语句
1 package com.teststring; 2 3 public class TestSwitch { 4 public static void main(String[] args) { 5 String str[] = new String[]{".png", ".exe", ".jpg", ".bat", ".txt", ".sql", ".java", ".c", ".cpp"}; 6 for (int i = 0; i < str.length; i++) { 7 switch (str[i]) { 8 case ".png": 9 case ".jpg": 10 System.out.println(str[i]+"结尾,是一个图片。"); 11 break; 12 default: 13 System.out.println(str[i]+"结尾,不是一个图片。"); 14 break; 15 } 16 } 17 18 } 19 }
1.3字符和字节
1 public static void setName(){ 2 //将姓名第2位改为* 例如 李星星为李*星 张率改为张* 3 String str=null; 4 char[] bytes = str.toCharArray(); 5 //byte[] bytes = str.getBytes(); 错误,中文3字节 6 bytes[1] = '*'; 7 str = new String(bytes); 8 // str.replace(str.charAt(1),'*');错误 9 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)