字符串
String
类中使用 final
关键字修饰保存字符串的数组。 final
修饰的类不能被继承,final
修饰的方法不能被重写。
修饰的变量是基本数据类型则值不能改变,修饰的变量是引用类型则不能再指向其他对象
StringBuilder
类/StringBuffer
类可以对同一字符串进行修改。
String 常用方法
Java 中的 String
类提供了许多有用的方法来处理字符串。以下是一些常用的 String
方法:
- 构造方法:
String()
: 创建一个新的空字符串。String(char[] value)
: 从字符数组创建字符串。String(String original)
: 创建一个新字符串,是原始字符串的副本。
- 比较方法:
equals(Object another)
: 比较两个字符串的内容是否相等。equalsIgnoreCase(String another)
: 忽略大小写比较两个字符串的内容是否相等。compareTo(String another)
: 根据字典顺序比较两个字符串。
- 大小写转换:
toLowerCase()
: 将字符串转换为小写。toUpperCase()
: 将字符串转换为大写。
- 修剪和删除:
trim()
: 去除字符串两端的空白字符。replace(char old, char new)
: 替换字符串中的字符。replaceAll(String regex, String replacement)
: 使用正则表达式替换字符串。
- 分割和连接:
split(String regex)
: 使用正则表达式分割字符串。substring(int beginIndex)
: 返回从指定索引开始的子字符串。substring(int beginIndex, int endIndex)
: 返回从beginIndex到endIndex的子字符串。concat(String str)
: 将指定字符串连接到此字符串的结尾。
- 查找和定位:
indexOf(int ch)
: 返回字符在字符串中首次出现的索引。indexOf(String str)
: 返回子字符串在字符串中首次出现的索引。lastIndexOf(int ch)
: 返回字符在字符串中最后一次出现的索引。contains(CharSequence s)
: 判断字符串是否包含指定的序列。
- 长度和空检查:
length()
: 返回字符串的长度。isEmpty()
: 判断字符串是否为空。
- 字符访问:
charAt(int index)
: 返回指定索引处的字符。
- 格式化:
format(String format, Object... args)
: 格式化字符串。
- 其他:
valueOf(Object obj)
: 返回对象的字符串表示形式。intern()
: 返回字符串文字的规范化表示形式。
这些方法提供了对字符串进行各种操作的能力,包括创建、比较、修改、查找和格式化等。
StingBuffer / StringBuilder
StringBuilder
和 StringBuffer
是Java中用于处理可变字符串的两个类。它们在功能上相似,但有一些关键的区别。以下是这两个类的一些常用方法:
StringBuilder 的常用方法
- 构造方法:
StringBuilder()
:创建一个新的StringBuilder对象。StringBuilder(int capacity)
:创建一个新的StringBuilder对象,初始容量为指定的值。
- append():
- 用于将字符串、字符数组、其他StringBuilder对象或任何对象追加到当前字符串的末尾。
- insert(int offset, …):
- 在指定位置插入字符串、字符数组或对象。
- delete(int start, int end):
- 删除字符串中从start到end(不包括end)的字符。
- deleteCharAt(int index):
- 删除指定索引处的字符。
- replace(int start, int end, String str):
- 用新的字符串替换从start到end的字符序列。
- reverse():
- 反转StringBuilder中的字符序列。
- substring(int start) 或 substring(int start, int end):
- 返回从start到末尾或从start到end的子字符串。
- setCharAt(int index, char ch):
- 将指定索引处的字符设置为新的字符。
- capacity():
- 返回当前StringBuilder的容量。
- ensureCapacity(int minimumCapacity):
- 确保StringBuilder的容量至少为指定的最小容量。
- toString():
- 返回StringBuilder的字符串表示。
StringBuffer 的常用方法
StringBuffer
类的方法与 StringBuilder
类似,但 StringBuffer
是线程安全的。这意味着它的方法是同步的,可以在多线程环境中使用,而不会相互干扰。
- 构造方法:
StringBuffer()
:创建一个新的StringBuffer对象。StringBuffer(int capacity)
:创建一个新的StringBuffer对象,初始容量为指定的值。StringBuffer(String str)
:创建一个新的StringBuffer对象,包含指定字符串的内容。
- append()、insert()、delete()、deleteCharAt()、replace()、reverse()、substring()、setCharAt():
- 与StringBuilder相同,但这些方法是同步的。
- capacity()、ensureCapacity()、toString():
- 与StringBuilder相同,但这些方法也是同步的。
区别:
StringBuilder
是非线程安全的,而StringBuffer
是线程安全的。StringBuilder
的方法通常比StringBuffer
的方法更快,因为它们不需要同步。- 在单线程环境中,推荐使用
StringBuilder
;在多线程环境中,推荐使用StringBuffer
。
这些方法提供了强大的功能,可以对字符串进行各种操作,而不需要创建多个中间字符串,这有助于提高性能。
Character 常用方法
Java 中的 Character
类提供了许多用于处理单个字符的方法。以下是一些常用的 Character
类方法:
- isLetter(char ch): 检查指定字符是否是字母。
- isDigit(char ch): 检查指定字符是否是数字。
- isWhitespace(char ch): 检查指定字符是否是空白字符。
- isUpperCase(char ch): 检查指定字符是否是大写字母。
- isLowerCase(char ch): 检查指定字符是否是小写字母。
- toUpperCase(char ch): 将指定字符转换为大写形式。
- toLowerCase(char ch): 将指定字符转换为小写形式。
- digit(char ch, int radix): 将指定字符转换为指定基数的整数。
- forDigit(int digit, int radix): 将指定的数字转换为指定基数的字符。
- compare(char x, char y): 比较两个字符的相对顺序。
- charCount(int value): 确定一个值(如二进制数)需要多少个字符来表示。
- reverseBytes(char ch): 反转字符的字节顺序。
- isLetterOrDigit(char ch): 检查指定字符是否是字母或数字。
- isAlphabetic(char ch): 检查指定字符是否是字母字符。
- getNumericValue(char ch): 获取指定字符的数字值。
- getType(char ch): 获取指定字符的类型。
- isDefined(char ch): 检查指定字符是否有明确的Unicode分配。
- isMirrored(char ch): 检查指定字符是否是镜像字符。
- codePointAt(char ch): 返回一个字符(
char
类型)的码点。 - codePointBefore(CharSequence seq, int index): 返回给定序列中指定索引前的码点。
- codePointCount(CharSequence seq, int start, int end): 计算给定序列中从开始索引到结束索引的码点数。
- toChars(int codePoint): 将指定的码点转换为字符数组。
- toString(char c): 返回一个新的
String
对象,包含给定的字符。 - valueOf(char c): 返回一个包装给定字符的
Character
实例。
这些方法提供了对字符进行分类、转换、比较和获取字符属性的能力,是处理字符数据时非常有用的工具。
344. 反转字符串
双指针法
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while (left < right) {
// 交换左右两端的元素 双指针
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
class Solution {
public String reverseStr(String s, int k) {
StringBuffer res = new StringBuffer();
int length = s.length();
int start = 0;
while (start < length) {
// 找到k处和2k处
StringBuffer temp = new StringBuffer();
// 与length进行判断,如果大于length了,那就将其置为length
int firstK = (start + k > length) ? length : start + k;
int secondK = (start + (2 * k) > length) ? length : start + (2 * k);
//无论start所处位置,至少会反转一次
temp.append(s.substring(start, firstK));
res.append(temp.reverse());
// 如果firstK到secondK之间有元素,这些元素直接放入res里即可。
if (firstK < secondK) { //此时剩余长度一定大于k。
res.append(s.substring(firstK, secondK));
}
start += (2 * k);
}
return res.toString();
}
}
54.替换数字(第八期模拟笔试)
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (Character.isDigit(s.charAt(i))) {
sb.append("number");
}else sb.append(s.charAt(i));
}
System.out.println(sb);
}
}