L1-032 Left-pad(Java)

发布时间:2024年01月17日

根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用*去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是******GPLT。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。

输入格式:

输入在第一行给出一个正整数N(≤104)和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。

输出格式:

在一行中输出结果字符串。

输入样例1:

15 _
I love GPLT

输出样例1:

____I love GPLT

输入样例2:

4 *
this is a sample for cut

输出样例2:

cut

解题思路

  1. 读取目标长度 N 和填充字符。
  2. 读取原始字符串。
  3. 计算需要填充的字符数量:paddingCount = N - 原始字符串的长度
  4. 如果 paddingCount 大于 0,则在原始字符串前面添加相应数量的填充字符。
  5. 输出结果字符串。

如果 paddingCount 小于或等于 0,则表示原始字符串的长度已经达到或超过了目标长度,直接输出原始字符串的最后 N 个字符即可。

解题过程中遇到的问题

什么时候需要用到scanner.nextLine(); // 读取换行符

在Java中,使用scanner.nextLine();来读取换行符通常是在处理用户输入时,尤其是在连续读取多种类型的输入(如整数、字符串等)时非常重要。这种情况通常出现在以下几种情景:

  1. 在读取整数或其他数据类型后读取字符串:当你使用例如scanner.nextInt();scanner.nextDouble();这样的方法读取非字符串类型的输入后,这些方法不会读取行尾的换行符(\n)。如果紧接着使用scanner.nextLine();来读取字符串,它会读取到之前输入后留下的换行符,并返回一个空字符串。为了避免这个问题,通常在读取完非字符串类型的数据后,先使用一次scanner.nextLine();来消耗掉这个换行符。
  2. 在读取多行数据时:如果你需要读取多行数据,每行都用换行符分隔,那么使用scanner.nextLine();是合适的。它会读取直到下一个换行符之前的所有字符,包括空格,这对于处理多行字符串输入非常有用。

例如,考虑以下输入场景:

int number = scanner.nextInt(); // 假设用户输入了一个数字后按下了回车
scanner.nextLine(); // 这一行读取了上一个输入后的换行符
String text = scanner.nextLine(); // 现在这一行才是真正读取用户输入的字符串

如果在这个例子中没有使用scanner.nextLine();来读取第一个数字后的换行符,那么String text = scanner.nextLine();这行将会立即读取到那个换行符,并返回一个空字符串,而不是预期的用户输入。

代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int targetLength = scanner.nextInt(); // 目标长度
        String paddingChar = scanner.next(); // 填充字符
        scanner.nextLine(); // 读取换行符
        String originalString = scanner.nextLine(); // 原始字符串

        int paddingCount = targetLength - originalString.length(); // 计算需要填充的字符数

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < paddingCount; i++) {
            result.append(paddingChar); // 添加填充字符
        }

        if (paddingCount < 0) {
            // 如果填充字符数为负,截取原始字符串的后部分
            result.append(originalString.substring(-paddingCount));
        } else {
            // 否则,将原始字符串添加到结果中
            result.append(originalString);
        }

        System.out.println(result.toString()); // 输出结果字符串
        scanner.close();
    }
}
文章来源:https://blog.csdn.net/Gracener/article/details/135661323
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。