WordPress找不到站点,备案查询入口,wordpress 文章同步微信,dw静态网页制作#x1f451;专栏内容#xff1a;力扣刷题⛪个人主页#xff1a;子夜的星的主页#x1f495;座右铭#xff1a;前路未远#xff0c;步履不停 目录 一、题目描述二、题目分析1、使用String内部方法2、使用StringBuilder 一、题目描述
题目链接#xff1a;URL化
编写一种… 专栏内容力扣刷题⛪个人主页子夜的星的主页座右铭前路未远步履不停 目录 一、题目描述二、题目分析1、使用String内部方法2、使用StringBuilder 一、题目描述
题目链接URL化
编写一种方法将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符并且知道字符串的“真实”长度。注用Java实现的话请使用字符数组实现以便直接在数组上操作。 二、题目分析
解这道题之前先搞明白题目中说的真实长度的意思。
题目说的“真实长度” 指的是字符串的实际长度即字符串中包含的有效字符的数量。 与 s.length()不同s.length() 是指字符串对象在内存中的长度而 “真实长度” 是指字符串中实际存储的字符的数量。所以这道题后面的遍历都需要用到传入的length而非.length();
1、使用String内部方法
介绍两个String的内部方法。
substring(int beginIndex, int endIndex) 这个方法从字符串中提取子串包括 ·beginIndex· 处的字符但不包括 endIndex 处的字符。
replaceAll(String regex, String replacement) 这个方法用指定的替换字符串替换字符串中所有匹配给定正则表达式的子字符串。
使用这两个内部方法就可以解决这道题。
class Solution {public String replaceSpaces(String S, int length) {String sb S.substring(0,length);return S.replaceAll( , %20);}
}但是这样写有几个问题。首先这样写速度比较慢其次这样写会如果题目更改条件可能就没办法用了。因为replaceAll方法需要注意正则表达式的特殊字符。如果替换字符串中包含正则表达式的特殊字符可能会导致错误的结果。下面是需要注意的一些正则表达式特殊字符
特殊字符描述.在正则表达式中表示匹配除换行符 \n 之外的任何字符。可能导致匹配不希望替换的字符。\在正则表达式中用于转义字符使其失去特殊意义。如果替换字符串包含反斜杠可能需要使用两个反斜杠 \\ 进行转义。$在正则表达式中表示行尾。如果替换字符串包含美元符号可能导致意外的匹配。*在正则表达式中表示零个或多个前导元素。如果替换字符串包含星号可能导致意外的匹配。
2、使用StringBuilder
先介绍一下StringBuilder类。StringBuilder 是 Java 中用于处理可变字符串的类它属于 java.lang 包。与 String 不同StringBuilder 对象的长度和内容可以修改适用于需要频繁进行字符串拼接、插入、删除等操作的场景。
StringBuilder的详细内容Java8官方文档
介绍一下本题中需要使用的两个方法。
append 方法是 StringBuilder 类的一个重要方法用于在可变的字符序列StringBuilder 对象的末尾追加指定的字符、字符串或其他类型的数据。由于 StringBuilder 是可变的使用 append 方法可以有效地构建字符串而不会产生额外的字符串对象从而提高性能。
StringBuilder sb new StringBuilder();// 追加字符串
sb.append(Hello);// 追加字符
sb.append( );// 追加整数
sb.append(123);// 追加浮点数
sb.append(3.14);// 追加换行符
sb.append(\n);
toString 方法是 StringBuilder 类中的一个方法用于将 StringBuilder 对象的内容转换为一个字符串。因为 StringBuilder 是可变的字符序列而 String 是不可变的字符序列toString 方法的调用允许将可变的字符序列转换为不可变的字符串。
以下是 toString 方法的基本形式
public String toString()这个方法返回一个包含 StringBuilder 对象中字符序列的新的字符串对象。可以在需要字符串表示形式的地方使用这个方法比如打印、字符串拼接或其他需要字符串的场合。
下面是一个使用 toString 方法的简单示例
StringBuilder sb new StringBuilder(Hello);
sb.append( World);String result sb.toString();System.out.println(result); // 输出Hello WorldtoString 方法将 StringBuilder 对象 sb 中的字符序列转换为一个新的字符串对象并赋值给 result 变量。然后我们打印 result输出了拼接后的字符串 “Hello World”。不过需要注意的是一旦调用了 toString 方法并获得了字符串对象它就是不可变的了。如果需要进一步修改字符串你需要创建一个新的可变字符序列。
所以这道题就可以这样写
class Solution {public String replaceSpaces(String S, int length) {StringBuilder sb new StringBuilder();for(int i 0; ilength; i){char ch S.charAt(i);if(ch ){sb.append(%20);}else{sb.append(ch);}}return sb.toString();}
}注char ch S.charAt(i); 作用是获取字符串 i 处的字符。