【发布时间】:2021-03-29 21:39:21
【问题描述】:
给定一个非空字符串和一个 int N,返回以 char 0 开头的字符串,然后是字符串的每个第 N 个字符。因此,如果 N 为 3,使用 char 0、3、6、... 等等。 N 大于等于 1。
everyNth("Miracle", 2) → "Mrce"
everyNth("abcdefg", 2) → "aceg"
everyNth("abcdefg", 3) → "adg"
此代码实际上并未编译。但是在放置几个断点并在调试模式下运行后,它显示它将返回一个 ASCII 值“77”而不是 str.charAt() 位置的字符串值。我不确定为什么。请帮忙。
我正在努力学习和理解如何解决这个问题背后的基本逻辑。
我知道您可以使用 Stringbuilder 并将每个值附加到缓冲区而不是打印值是获得答案的一种方法。所以我想避免使用任何预定义的类,它们会在后台执行逻辑。
尝试:
我也尝试将String 类型转换为char,但结果相同。
public static String everyNth(String str, int n){
String charAtPosition = "";
int x = 0, pos = 0;
String finalString = "";
String stringPosition = str.charAt(pos); <-- Getting ASCII value instead of string value for ex. in "Miracle" string input, it should return "M"
charAtPosition = stringPosition * n;
for(int i = 0; i < str.length(); i++){
finalString = finalString + charAtPosition;
}
return finalString;
}
【问题讨论】:
-
String stringPosition = str.charAt(pos);正在编译吗?还有charAtPosition = stringPosition * n;? -
不,它实际上没有编译。我基于我在调试模式下运行发布了这个问题。
-
将
String stringPosition = str.charAt(pos)替换为String stringPosition = String.valueOf(str.charAt(0))。您不能将char值分配给String变量。