如何在一定字符限制后在最近的空格后剪掉一行?[复制]

How to have a line cut off after the nearest space after a certain character limit? [duplicate]

提问人:Nick Slack 提问时间:3/8/2023 更新时间:3/8/2023 访问量:30

问:

我希望每行在 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 循环 子字符串 java.util.scanner

评论


答:

0赞 MarsAtomic 3/8/2023 #1

看起来你会从一些方向中受益更多,而不是一个固定的解决方案,因为你还在学习,所以我只给你一些结构和一些工具,希望你能自己制定出实际的代码。

您可以使用该方法循环访问 String 的字符。.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
    }
}

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

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