URL化。编写一种方法,将字符串中的空格全部替换为%20
。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java
实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例1:
输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith"
示例2:
输入:" ", 5 输出:"%20%20%20%20%20"
提示:
- 字符串长度在[0, 500000]范围内
- https://leetcode-cn.com/problems/string-to-url-lcci/
- https://www.cnblogs.com/WLCYSYS/p/13372866.html
- 这里的13是有效的长度
class Solution { public String replaceSpaces(String S, int length) { return S.substring(0, length).replaceAll(" ", "%20"); } }
second:
class Solution { public String replaceSpaces(String S, int length) { StringBuilder sb = new StringBuilder(); for(int i = 0;i < length; i++){ if(S.charAt(i) != ' '){ sb.append(S.charAt(i)); }else{ sb.append("%20"); } } return sb.toString(); } }
substring
public String substring(int beginIndex, int endIndex)
- 返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的
beginIndex
处开始,直到索引endIndex - 1
处的字符。因此,该子字符串的长度为endIndex-beginIndex
。示例:
"hamburger".substring(4, 8) returns "urge" "smiles".substring(1, 5) returns "mile"
- 参数:
beginIndex
- 起始索引(包括)。endIndex
- 结束索引(不包括)。- 返回:
- 指定的子字符串。
- 抛出:
IndexOutOfBoundsException
- 如果beginIndex
为负,或endIndex
大于此String
对象的长度,或beginIndex
大于endIndex
。
replace
public String replace(char oldChar, char newChar)
- 返回一个新的字符串,它是通过用
newChar
替换此字符串中出现的所有oldChar
得到的。如果
oldChar
在此String
对象表示的字符序列中没有出现,则返回对此String
对象的引用。否则,创建一个新的String
对象,它所表示的字符序列除了所有的oldChar
都被替换为newChar
之外,与此String
对象表示的字符序列相同。示例:
"mesquite in your cellar".replace('e', 'o') returns "mosquito in your collar" "the war of baronets".replace('r', 'y') returns "the way of bayonets" "sparring with a purple porpoise".replace('p', 't') returns "starring with a turtle tortoise" "JonL".replace('q', 'x') returns "JonL" (no change)
- 参数:
oldChar
- 原字符。newChar
- 新字符。- 返回:
- 一个从此字符串派生的字符串,它将此字符串中的所有
oldChar
替代为newChar
。
类 StringBuilder
java.lang.Object
java.lang.StringBuilder
- 所有已实现的接口:
- Serializable, Appendable, CharSequence
public final class StringBuilderextends Objectimplements Serializable, CharSequence
一个可变的字符序列。此类提供一个与
StringBuffer
兼容的 API,但不保证同步。该类被设计用作StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer
要快。在
StringBuilder
上的主要操作是append
和insert
方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append
方法始终将这些字符添加到生成器的末端;而insert
方法则在指定的点添加字符。例如,如果
z
引用一个当前内容为 "start
" 的字符串的生成器对象,则该方法调用z.append("le")
将使字符串生成器包含 "startle
",而z.insert(4, "le")
将更改字符串生成器,使之包含 "starlet
"。通常,如果 sb 引用
StringBuilder
的实例,则sb.append(x)
和sb.insert(sb.length(), x)
具有相同的效果。每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。将
StringBuilder
的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer
。