字符串刷题 344. 反转字符串|541. 反转字符串 II|54.替换数字

字符串

String 类中使用 final关键字修饰保存字符串的数组。 final修饰的类不能被继承,final修饰的方法不能被重写。
修饰的变量是基本数据类型则值不能改变,修饰的变量是引用类型则不能再指向其他对象

StringBuilder 类/StringBuffer类可以对同一字符串进行修改。

String 常用方法

Java 中的 String 类提供了许多有用的方法来处理字符串。以下是一些常用的 String 方法:

  1. 构造方法
    • String(): 创建一个新的空字符串。
    • String(char[] value): 从字符数组创建字符串。
    • String(String original): 创建一个新字符串,是原始字符串的副本。
  2. 比较方法
    • equals(Object another): 比较两个字符串的内容是否相等。
    • equalsIgnoreCase(String another): 忽略大小写比较两个字符串的内容是否相等。
    • compareTo(String another): 根据字典顺序比较两个字符串。
  3. 大小写转换
    • toLowerCase(): 将字符串转换为小写。
    • toUpperCase(): 将字符串转换为大写。
  4. 修剪和删除
    • trim(): 去除字符串两端的空白字符。
    • replace(char old, char new): 替换字符串中的字符。
    • replaceAll(String regex, String replacement): 使用正则表达式替换字符串。
  5. 分割和连接
    • split(String regex): 使用正则表达式分割字符串。
    • substring(int beginIndex): 返回从指定索引开始的子字符串。
    • substring(int beginIndex, int endIndex): 返回从beginIndex到endIndex的子字符串。
    • concat(String str): 将指定字符串连接到此字符串的结尾。
  6. 查找和定位
    • indexOf(int ch): 返回字符在字符串中首次出现的索引。
    • indexOf(String str): 返回子字符串在字符串中首次出现的索引。
    • lastIndexOf(int ch): 返回字符在字符串中最后一次出现的索引。
    • contains(CharSequence s): 判断字符串是否包含指定的序列。
  7. 长度和空检查
    • length(): 返回字符串的长度。
    • isEmpty(): 判断字符串是否为空。
  8. 字符访问
    • charAt(int index): 返回指定索引处的字符。
  9. 格式化
    • format(String format, Object... args): 格式化字符串。
  10. 其他
    • valueOf(Object obj): 返回对象的字符串表示形式。
    • intern(): 返回字符串文字的规范化表示形式。

这些方法提供了对字符串进行各种操作的能力,包括创建、比较、修改、查找和格式化等。

StingBuffer / StringBuilder

StringBuilderStringBuffer 是Java中用于处理可变字符串的两个类。它们在功能上相似,但有一些关键的区别。以下是这两个类的一些常用方法:

StringBuilder 的常用方法

  1. 构造方法
    • StringBuilder():创建一个新的StringBuilder对象。
    • StringBuilder(int capacity):创建一个新的StringBuilder对象,初始容量为指定的值。
  2. append()
    • 用于将字符串、字符数组、其他StringBuilder对象或任何对象追加到当前字符串的末尾。
  3. insert(int offset, …)
    • 在指定位置插入字符串、字符数组或对象。
  4. delete(int start, int end)
    • 删除字符串中从start到end(不包括end)的字符。
  5. deleteCharAt(int index)
    • 删除指定索引处的字符。
  6. replace(int start, int end, String str)
    • 用新的字符串替换从start到end的字符序列。
  7. reverse()
    • 反转StringBuilder中的字符序列。
  8. substring(int start)substring(int start, int end)
    • 返回从start到末尾或从start到end的子字符串。
  9. setCharAt(int index, char ch)
    • 将指定索引处的字符设置为新的字符。
  10. capacity()
    • 返回当前StringBuilder的容量。
  11. ensureCapacity(int minimumCapacity)
    • 确保StringBuilder的容量至少为指定的最小容量。
  12. toString()
    • 返回StringBuilder的字符串表示。

StringBuffer 的常用方法

StringBuffer 类的方法与 StringBuilder 类似,但 StringBuffer 是线程安全的。这意味着它的方法是同步的,可以在多线程环境中使用,而不会相互干扰。

  1. 构造方法
    • StringBuffer():创建一个新的StringBuffer对象。
    • StringBuffer(int capacity):创建一个新的StringBuffer对象,初始容量为指定的值。
    • StringBuffer(String str):创建一个新的StringBuffer对象,包含指定字符串的内容。
  2. append()insert()delete()deleteCharAt()replace()reverse()substring()setCharAt()
    • 与StringBuilder相同,但这些方法是同步的。
  3. capacity()ensureCapacity()toString()
    • 与StringBuilder相同,但这些方法也是同步的。

区别:

  • StringBuilder 是非线程安全的,而 StringBuffer 是线程安全的。
  • StringBuilder 的方法通常比 StringBuffer 的方法更快,因为它们不需要同步。
  • 在单线程环境中,推荐使用 StringBuilder;在多线程环境中,推荐使用 StringBuffer

这些方法提供了强大的功能,可以对字符串进行各种操作,而不需要创建多个中间字符串,这有助于提高性能。

Character 常用方法

Java 中的 Character 类提供了许多用于处理单个字符的方法。以下是一些常用的 Character 类方法:

  1. isLetter(char ch): 检查指定字符是否是字母。
  2. isDigit(char ch): 检查指定字符是否是数字。
  3. isWhitespace(char ch): 检查指定字符是否是空白字符。
  4. isUpperCase(char ch): 检查指定字符是否是大写字母。
  5. isLowerCase(char ch): 检查指定字符是否是小写字母。
  6. toUpperCase(char ch): 将指定字符转换为大写形式。
  7. toLowerCase(char ch): 将指定字符转换为小写形式。
  8. digit(char ch, int radix): 将指定字符转换为指定基数的整数。
  9. forDigit(int digit, int radix): 将指定的数字转换为指定基数的字符。
  10. compare(char x, char y): 比较两个字符的相对顺序。
  11. charCount(int value): 确定一个值(如二进制数)需要多少个字符来表示。
  12. reverseBytes(char ch): 反转字符的字节顺序。
  13. isLetterOrDigit(char ch): 检查指定字符是否是字母或数字。
  14. isAlphabetic(char ch): 检查指定字符是否是字母字符。
  15. getNumericValue(char ch): 获取指定字符的数字值。
  16. getType(char ch): 获取指定字符的类型。
  17. isDefined(char ch): 检查指定字符是否有明确的Unicode分配。
  18. isMirrored(char ch): 检查指定字符是否是镜像字符。
  19. codePointAt(char ch): 返回一个字符(char 类型)的码点。
  20. codePointBefore(CharSequence seq, int index): 返回给定序列中指定索引前的码点。
  21. codePointCount(CharSequence seq, int start, int end): 计算给定序列中从开始索引到结束索引的码点数。
  22. toChars(int codePoint): 将指定的码点转换为字符数组。
  23. toString(char c): 返回一个新的 String 对象,包含给定的字符。
  24. 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--;
        }
    }
}

###541. 反转字符串 II

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);
    }
}
  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值