java - 获取 ASCII 值而不是字符串值
问题描述
给定一个非空字符串和一个 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)
为String stringPosition = String.valueOf(str.charAt(0))
asstr.charAt(pos)
返回一个char
您不能分配给String
变量的值。
此外,它就像0
使用 value 启动循环计数器并单步执行一样简单n
。在每次迭代中,将循环计数器处的字符附加到 a StringBuilder
。
public final class Main {
public static final void main(String[] args) {
System.out.println(everyNth("Miracle", 2));
System.out.println(everyNth("abcdefg", 2));
System.out.println(everyNth("abcdefg", 3));
}
public static String everyNth(String str, int n) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i += n) {
sb.append(str.charAt(i));
}
return sb.toString();
}
}
输出:
Mrce
aceg
adg
您可以使用String
代替,StringBuilder
但我建议您在这种情况下使用StringBuilder
代替,String
因为循环中重复的字符串连接会创建String
与连接数量一样多的额外实例。检查此讨论以了解更多信息。
推荐阅读
- c++ - 如何从 cin 读取直到输入非数字的内容?
- go - 如何在golang中翻译或移动切片中的值?
- python - Python accuracy_check 为翻转分类给出 0 结果
- react-native - 在 React Native 中传递事件和附加变量
- android - 应用程序被杀死并重新启动手机后如何保留广播接收器
- python-3.x - 如何修复 tkinter 验证(使用正则表达式和 vcmd)
- sql-server - SQL 报表生成器:如何合并组?
- sql - 有没有更有效的方法来编写这个 SQL?
- go - Go:调用函数时如何使用命名参数?
- css - 如何在 ag-grid 中的选定行上显示轮廓?