网站建设市场调研,管理咨询的主体包括哪些,怎么做qq业务网站,wordpress怎么离线修改主页页脚文章目录一 Java中常用方法1. 基础获取类2. 比较与判断类3. 修改与转换类#xff08;产生新字符串#xff09;4. 分割与合并5.StringBuilder二 . 四种字符串必会技能1.字符串与数字的切换A.String 转 int / longB. int/long 转 String2.字符与ASCII 码A.字符转数字B. 字母移位…文章目录一 Java中常用方法1. 基础获取类2. 比较与判断类3. 修改与转换类产生新字符串4. 分割与合并5.StringBuilder二 . 四种字符串必会技能1.字符串与数字的切换A.String 转 int / longB. int/long 转 String2.字符与ASCII 码A.字符转数字B. 字母移位C.字符的大小写转换D. 判断字符类型3.格式化输出4. 字典序比较 (排序用的)5. 正则表达式分割一 Java中常用方法1. 基础获取类s 表示某一个字符串String方法说明竞赛避坑指南s.length()返回字符串长度注意它是方法必须带()。数组是.length属性。s.charAt(i)获取索引i处的字符配合while循环做边界检查i 0 i s.length()。s.indexOf(str)查找子串第一次出现的位置如果没找到返回-1。在处理特定模式搜索时极好用。s.substring(start, end)截取子串重点左闭右开[start, end)。包含start但不包含end。2. 比较与判断类在竞赛中千万不要用 比较字符串内容•s.equals(s2)比较两个字符串内容是否完全相等。•s.equalsIgnoreCase(s2)忽略大小写比较在某些天梯赛题目中很有用。•s.startsWith(prefix) / s.endsWith(suffix)判断是否以某段开头或结尾。•s.isEmpty()判断长度是否为 0。3. 修改与转换类产生新字符串注意Java 中的 String 是不可变的这些方法都会返回一个全新的字符串。•s.toLowerCase() / s.toUpperCase()全部转小写/大写。•s.trim()去掉首尾空格处理输入数据不规范时是救命药。•s.replace(old, new)替换所有匹配的字符或子串。•s.toCharArray()竞赛神技。如果你觉得 s.charAt(i) 写起来太长先转成 char[]然后用 arr[i] 访问速度更快且代码更短。4. 分割与合并s.split(String regex)按规则切分。例 String[] words s.split( ); 可以把句子拆成单词。String.join(delimiter, elements)把数组或列表用指定符号连起来。5.StringBuilder如果在循环里频繁修改字符串比如 s “a”,Java 每次都会创建新对象导致超时,所以我们可以选择来new上一个StringBuilder为什么我们要使用StringBuilder呢?因为在Java中,String是不可变的,比如当我们有一个字符串 s “a” 时,执行s s b时:1.Java不会在原来的a的后面直接加b;2.而是创建一个新对象,把a拷贝过去,再把b加上去;3.导致原来的a变成了多余的那个,占用了内存所以当我们在循环10000做 s “a” ,则会创建10000个临时字符串对象,直接让内存爆炸,同时时间复杂度也到达了O(N ^ 2).而StringBuilder的优势是他内部有着一个字符数组(char[]),当我们执行sb.append时,它直接在数组的下一个空位填入‘b不创建新对象如果数组满了它会自动扩大一倍(扩容)然后继续填时间复杂度接近 O(N).竞赛常用方法方法说明竞赛场景sb.append(xxx)追加内容拼接答案、拼接数字、拼接字符。支持链式调用。sb.reverse()原地翻转判断回文、大数加法低位对齐、反转字符串。sb.delete(start, end)删除一段类似于substring的逆操作清理不需要的后缀。sb.setCharAt(i, c)修改指定字符这是String做不到的修改某个位置的字符。sb.insert(offset, str)在指定位置插入比如在最前面插入一个负号。sb.length()获取当前长度循环遍历时用。sb.toString()转回String最终输出答案时必须调用。sb.setLength(0)清空StringBuilder把指针重置为 0内容逻辑上清空了现在有一个新场景假设我们要处理N NN组数据每组数据都要拼一个结果并输出。A方法StringBuildersbnewStringBuilder();for(inti0;i3;i){sb.append(Datai);System.out.println(sb.toString());}这种情况下第一轮Data0第二轮Data0Data1 -- 错了上一轮的脏数据还在第三轮Data0Data1Data2数据乱了并不是我们想要的结果B方法直接newfor(inti0;i100000;i){StringBuildersbnewStringBuilder();sb.append(Datai);System.out.println(sb.toString());// 循环结束sb 变成垃圾}这种情况下成功输出我们想要的结果后果内存直接爆炸你在内存里创建了 10 万个对象又丢弃了 10 万个同时每次 new 出来的数组都很小每次都要重新经历从小变大的扩容过程。C方法使用setLength0StringBuildersbnewStringBuilder();for(inti0;i100000;i){sb.setLength(0);sb.append(Datai);System.out.println(sb.toString());}这种情况下成功输出我们想要的结果后果全程只有 1 个对象同时 比如第一轮你的字符串很长把数组撑到了 5000 大小。第二轮开始时sb 依然拥有 5000 的容量根本不需要再扩容直接填进去就行二 . 四种字符串必会技能1.字符串与数字的切换场景题目给了“1000”要求变成数字1000去做加减乘除或者是算出结果250后将其拼接到字符串A.String 转 int / longInteger.parseInt(s);Strings12345;intnumInteger.parseInt(s);// 转 intlongbigNumLong.parseLong(9999999999);// 转 long (超过21亿必须用这个)int 最大只能存约 21 亿 (2 × 10 9 2 \times 10^92×109)。如果题目说数字可能很大比如 18 位必须用 Long.parseLong。如果字符串里混进了空格或字母比如 123 或 “12a”这行代码会直接报错NumberFormatException。如果只是首尾空格直接用s.trim()就好但如果是“123ad 23”等这些混入了各种非数字的字符时则需要使用其他方法第一种方法暴力清洗直接把所有非数字的去掉Strings123ad 23;;Stringcleans.replaceAll([^0-9],);// [^0-9] \\D意思是除了0-9以外的所有字符,把所有非数字字符替换成空字符串intnumInteger.parseInt(clean);System.out.println(num);//结果为12323如果要求读取直到遇到非数字就输出那么就不能使用上面的方法第二种方法精细提取法读取直到遇到非数字Strings123ad 23;;intnum0;for(inti0;is.length();i){charchs.charAt(i);// 如果是数字就累加if(Character.isDigit(ch)){// 核心公式原数字 * 10 新的一位// c - 0 是把字符变成数字numnum*10(ch-0);}else{break;}}System.out.println(num);//结果为123B. int/long 转 String这是为了输出或者拼接intnum42;// 写法 1 利用 Java 的自动装箱虽然不是最快但最不容易错Strings1num;// 写法 2 性能稍好看着专业Strings2String.valueOf(num);2.字符与ASCII 码场景 “把所有字母向后移 3 位”或者“判断这个字符是不是数字”核心原理 char 在 Java 里本质上是一个整数要把 char 当成整数去用‘0’ 的整数值是 48。‘A’ 的整数值是 65。‘a’ 的整数值是 97。A.字符转数字问题怎么把字符 ‘5’ 变成整数 5intnumint5;//错误//输出53 并非 5intnum5-0;//正确// 53 - 48 5B. 字母移位charcA;// 往后移 1 位变成 Bcharnext(char)(c1);// 必须强转回 char因为计算结果是 intC.字符的大小写转换//A 65, a 97//小写变大写 减32charuppercaseLetters(char)(a-32);//大写变小写 加32charlowercaseLetters(char)(B32);D. 判断字符类型用 Java 自带的工具类 CharacterCharacter.isDigit( c ) : 是不是 ‘0’-‘9’Character.isLetter( c ): 是不是字符Character.isLetterOrDigit( c ): 是不是字符或者数字Character.isUpperCase( c ): 是不是大写Character.isLowerCase( c ): 是不是小写3.格式化输出题目出现要“保留小数”和“补零”的情况下:doublepi3.1415926;inthour5;// 1. 保留 2 位小数 (会自动四舍五入)System.out.printf(%.2f,pi);// 输出: 3.14// 2. 整数补零 (总共占 2 位不够补 0)System.out.printf(%02d,hour);// 输出: 05// 3. 组合拳输出 Time: 05, Score: 3.14StringresString.format(Time: %02d, Score: %.2f,hour,pi);System.out.println(res);4. 字典序比较 (排序用的)题目出现要“请把这些名字按字典序从小到大排列”, 不能用 或 比较字符串要用compareTo()Strings1apple;Strings2banana;// 返回值规则// 0 : s1 在 s2 前面 (apple banana)// 0 : 相等// 0 : s1 在 s2 后面intresults1.compareTo(s2);// 对字符串数组排序String[]arr{dog,cat,apple};Arrays.sort(arr);// 默认就是按字典序排的apple, cat, dog5. 正则表达式分割题目给出“Please, split this… sentence!” (标点混杂空格)用普通的 split( ) 切不干净所以给用下面的方法StringsHello, World! Java;// split 里面填的是正则表达式// [ ,!] 表示只要遇到 空格、逗号、感叹号 中的任意一个或多个就切一刀String[]partss.split([ ,!]);