获取 ASCII 值而不是字符串值

Roy*_*Roy -2 java string 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"
Run Code Online (Sandbox Code Playgroud)

这段代码实际上并没有编译。但是在放置几个断点并在调试模式下运行后,它显示它将在该str.charAt()位置返回一个 ASCII 值“77”而不是一个字符串值。我不知道为什么。请帮忙。

我正在努力学习和理解如何解决这个问题背后的基本逻辑。

我知道您可以使用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;
}
Run Code Online (Sandbox Code Playgroud)

Arv*_*ash 5

您的代码无法编译。首先,替换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();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Mrce
aceg
adg
Run Code Online (Sandbox Code Playgroud)

您可以使用String代替,StringBuilder但我建议您在这种情况下使用StringBuilder代替,String因为循环中重复的字符串连接会创建String 与连接数量一样多的额外实例。查看此讨论以了解更多信息。