我之前在这里问了一个问题,不确定回答者的意思?[复制]

I asked a question on here earlier and am not sure what the answerer meant? [duplicate]

提问人:Nick Slack 提问时间:3/8/2023 最后编辑:Nick Slack 更新时间:3/8/2023 访问量:58

问:

我希望每一行在 20 个字符过后拆分,但我希望它在最近的空格处拆分,这样句子只有整个单词。

回答者说这样做:

str="some long string"
startPos=0, endPos=0
while (startPos < str.length) {
    determine endPos
    print substring from startPos to endPos
    move startPos to endPos+1 // this is the part I am confused about.
}

我写的代码是这样的:

System.out.println("Please input a word: ");
            Scanner stringScanner = new Scanner(System.in);
            String input = stringScanner.nextLine();
            
            int startPos = 0;
            int endPos = 0;
    
            while (startPos < input.length()) {
                endPos = 20;
                 System.out.println(input.substring(startPos, endPos));
                 startPos = endPos + 1; //This is the part I am confused about
            }

我不确定回答者将 startPos 移动到 endPos + 1 是什么意思。任何答案都会helo,谢谢。

编辑:

对不起,我忘了发布我的代码做什么:

程序现在给了我一个错误,说:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 21, end 20, length 32
    

    at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4602)
        at java.base/java.lang.String.substring(String.java:2705)
        at StarBorder.StarBorder.main(StarBorder.java:18)

这就是我希望它做的:

Hello there, I am
doing some coding, 
I need some help
while-loop 子字符串 java.util.scanner

评论

2赞 Code-Apprentice 3/8/2023
我建议您链接到上一个答案,甚至将伪代码复制/粘贴到您的新问题中。
0赞 Code-Apprentice 3/8/2023
话虽如此,在看了前面的答案之后,我认为你的解释和任何答案一样好。这段代码有效吗?如果没有,会发生什么,你希望它做什么?
2赞 Stephen C 3/8/2023
别这样。相反,请使用评论询问写答案的人以澄清答案。
1赞 Nick Slack 3/8/2023
谢谢,我会读到的
1赞 markspace 3/8/2023
我看到的问题是 psudeo 代码中的“determine endPos”正在做很多工作。它可能需要一个自己的循环。我认为,将其分解成自己的方法会有所帮助。

答:

-2赞 Mr.Ziri 3/8/2023 #1

在代码中,您尝试将字符串从第 21 个字符拆分到第 20 个字符,但这是不可能的。 您应该设置 .我发现你想要第 20 个字符之后的第一个空格。Java 有一个内置方法,你可以获取 char 的索引,你可以设置起始限制。例如:endPosindexOf

String myStr = "Hello planet earth, you are a great planet.";
System.out.println(myStr.indexOf("e", 5));

/// Output 10 

您可以使用:

endPos = input.indexOf(" ", 20);