一、字符串常用api
string类
函数 | 说明 |
---|---|
char charAt(int index) | 返回 char指定索引处的值。 |
boolean contains(CharSequence s) | 当且仅当此字符串包含指定的char值序列时才返回true。 |
boolean equals(Object anObject) | 将此字符串与指定对象进行比较 |
boolean isEmpty() | 返回 true如果,且仅当 length()为 0 |
int length() | 返回此字符串的长度 |
String replace(char oldChar, char newChar) | 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar |
char[] toCharArray() | 将此字符串转换为新的字符数组。 |
static String valueOf(char c) | 返回 char参数的字符串 char形式。 |
String[] split(String regex) | 将此字符串分割为给定的 regular expression的匹配。 |
static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements) | 返回一个新 String的副本组成 CharSequence elements与指定的副本一起加入 delimiter 。 |
StringBuffer类
1、StringBuffer类主要增加了字符串的增删改查等操作
2、StringBuilder类为StringBuffer的子类,为单线程字符串缓存区,优点速度更快
函数 | 说明 |
---|---|
StringBuffer append(char c) | 将 char参数的字符串表示附加到此序列。 |
StringBuffer insert(int offset, char c) | 在此序列中插入 char参数的字符串表示形式。 |
StringBuffer reverse() | 导致该字符序列被序列的相反代替。 |
StringBuffer delete(int start, int end) | 删除此序列的子字符串中的字符。 |
int indexOf(String str) | 返回指定子字符串第一次出现的字符串内的索引。 |
二、翻转字符串里的单词
思路1:
很多语言对字符串提供了 split(拆分),reverse(翻转)和 join(连接)等方法,因此我们可以简单的调用内置的 API 完成操作:
使用 split 将字符串按空格分割成字符串数组;
使用 reverse 将字符串数组进行反转;
使用 join 方法将字符串数组拼成一个字符串。
代码:
class Solution {
public String reverseWords(String s) {
// 除去开头和末尾的空白字符
s = s.trim();
// 正则匹配连续的空白字符作为分隔符分割
List<String> wordList = Arrays.asList(s.split("\\s+"));
Collections.reverse(wordList);
return String.join(" ", wordList);
}
}
思路2:
1.去除首尾以及中间多余空格
2.反转整个字符串
3.反转各个单词
class Solution {
/**
* 1.去除首尾以及中间多余空格
* 2.反转整个字符串
* 3.反转各个单词
*/
public String reverseWords(String s) {
// 1.去除首尾以及中间多余空格
StringBuilder sb = removeSpace(s);
// 2.反转整个字符串
reverseString(sb, 0, sb.length() - 1);
// 3.反转各个单词
reverseEachWord(sb);
return sb.toString();
}
private StringBuilder removeSpace(String s) {
int start = 0;
int end = s.length() - 1;
//首先移除首尾空格
while (s.charAt(start) == ' ') start++;
while (s.charAt(end) == ' ') end--;
StringBuilder sb = new StringBuilder();
while (start <= end) {
char c = s.charAt(start);
//如果字符不为空,或者sb中存储的最后的一个字符不是空字符
if (c != ' ' || sb.charAt(sb.length() - 1) != ' ') {
sb.append(c);
}
start++;
}
return sb;
}
/**
* 反转字符串指定区间[start, end]的字符
*/
public void reverseString(StringBuilder sb, int start, int end) {
while (start < end) {
char temp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));
sb.setCharAt(end, temp);
start++;
end--;
}
}
private void reverseEachWord(StringBuilder sb) {
int start = 0;
int end = 1;
int n = sb.length();
while (start < n) {
while (end < n && sb.charAt(end) != ' ') {
end++;
}
reverseString(sb, start, end - 1);
start = end + 1;
end = start + 1;
}
}
}