如何在一定字符限制后的最近空格后截断一行?

问题描述 投票:0回答:1

我希望每行在 20 个字符过去后分开,但我希望它在最近的空格处分开,所以句子只有完整的单词。

这是我的代码:

//I have imported the scanner util above this.
System.out.println("Please input a word: ");
            Scanner stringScanner = new Scanner(System.in);
            String input = stringScanner.nextLine();
        
         int numberOfCharacters = 20;
        
         for (int i = 0; i < input.length(); i += numberOfCharacters) {
             String part = input.substring(i, Math.min(input.length(), i + numberOfCharacters));
             System.out.println(part);
         }
     }
}

这是我得到的输出:

Please input a sentence: 
hello there, I am doing some coding!

hello there, I am do
ing some coding!

这就是我想要的:

Please input a sentence: 
hello there, I am doing some coding!

hello there, I am   
doing some coding!

我不确定如何让它工作。谢谢你的任何答案。

java for-loop substring java.util.scanner
1个回答
0
投票

看起来你会从一些指导中获益更多,而不是罐装解决方案,因为你还在学习,所以我会给你一些结构和一些工具,希望你能解决实际问题自己编写代码。

您可以使用

.charAt()
方法遍历字符串的字符。

for(int pos = 0; pos < someString.length(); pos ++)
{
    System.out.println(someString.charAt(pos));
}

但是简单地说,您的要求是在第 20 个字符或之前找到第一个空格字符。

如果你决定倒数怎么办?从位置 20 开始(这实际上是第 21 个字符,因为我们正在处理从 0 开始的索引)。

for(int pos = numberOfCharacters; pos >= 0; pos --)
{
    if(someString.charAt(pos) == ' ')
    {
        // get the substring from 0 to pos for one line
        // get the substring from pos + 1 to end of line for the next
    }
}

如果那是一个空格,你知道你可以在那里对你的输入字符串进行子字符串化。如果不是,则向后移动一个字符,看它是否是空格,依此类推。这种“中断”的唯一方法是如果有人输入一个包含两个或多个连续空格的短字符串,但我不能告诉你如何处理它,因为这是一个你必须自己做出的设计决定。

如果你想花哨的话,你也可以将这个函数实现为一个自然适合这个函数的递归,但那是另一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.