根据新浪微博上的消息,有一位开发者不满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
解题思路
- 读取目标长度 N 和填充字符。
- 读取原始字符串。
- 计算需要填充的字符数量:paddingCount = N - 原始字符串的长度。
- 如果 paddingCount 大于 0,则在原始字符串前面添加相应数量的填充字符。
- 输出结果字符串。
如果 paddingCount 小于或等于 0,则表示原始字符串的长度已经达到或超过了目标长度,直接输出原始字符串的最后 N 个字符即可。
解题过程中遇到的问题
什么时候需要用到scanner.nextLine(); // 读取换行符
在Java中,使用scanner.nextLine();来读取换行符通常是在处理用户输入时,尤其是在连续读取多种类型的输入(如整数、字符串等)时非常重要。这种情况通常出现在以下几种情景:
- 在读取整数或其他数据类型后读取字符串:当你使用例如scanner.nextInt();或scanner.nextDouble();这样的方法读取非字符串类型的输入后,这些方法不会读取行尾的换行符(\n)。如果紧接着使用scanner.nextLine();来读取字符串,它会读取到之前输入后留下的换行符,并返回一个空字符串。为了避免这个问题,通常在读取完非字符串类型的数据后,先使用一次scanner.nextLine();来消耗掉这个换行符。
- 在读取多行数据时:如果你需要读取多行数据,每行都用换行符分隔,那么使用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();}
}