将字符串的阵列列表打印给带有单词包装的打印词
-
30-09-2019 - |
题
我和一些同学正在为Java进行家庭作业分配,该作业要求我们使用Word Wrap将字符串的数组列表打印给Printwriter,因此没有输出都通过80个字符。我们已经广泛地搜索了这一点,找不到任何基于Java API的方法来做到这一点。
我知道关于这样的家庭作业问题通常是“错误的”,但是我们只是在寻找最佳方法的建议,或者如果我们错过了API中的某些内容。这不是作业的主要部分,只是一个小的输出要求。
理想情况下,我希望能够wordwrap arraylist的tostring,因为它的格式已经很好。
解决方案
好吧,这对我来说是第一个,这是我的一个学生第一次发布有关我分配的项目之一的问题。他正在寻找一种算法的方式,而您分享的答案对我来说很好。但是,这是试图使事情变得过于复杂的典型情况。未提及的规格的一部分是80个字符的限制不是硬限制。我说输出文件的每一行必须长约80个字符。可以超过80多一点。在我的解决方案版本中,我只是进行了运行计数,并进行了计数的模量来添加线路结束。我改变了模量的值,直到输出文件看起来正确。这导致线条的数字确实很短,因此当数字很小时我使用了不同的模量。这不是该项目的重要组成部分,有趣的是,这引起了很多关注。
其他提示
我们的解决方案是创建一个临时的字符串,然后一一添加元素,然后是逗号。在添加元素之前,请检查是否添加它会使字符串超过80个字符,然后选择是否要打印并重置或只是附加。
这仍然存在额外尾声的问题,但是要处理的次数很多,我们会没事的。我一直希望避免这种情况,因为它最初比实际上更复杂。
我认为,更好的解决方案是创建自己的包装纸,以包装任何其他作家并覆盖方法 public void write(String str, int off, int len) throws IOException
. 。在这里,它应该循环运行并执行包装逻辑。
这种逻辑不像 str.substring(80)
. 。如果您要处理真实的文本并希望正确包装它(即不要剪裁单词,不要将昏迷或点移到下一行等),则必须实现一些逻辑。它可能不是太复杂,但可能取决于语言。例如,在英语中,在法语中,单词和结肠之间没有空间,它们在它们之间放置空间。
因此,我进行了5秒的谷歌搜索,并找到了以下内容 讨论 那可以帮助您。
private static final int MAX_CHARACTERS = 80;
public static void main(String[] args)
throws FileNotFoundException
{
List<String> strings = new ArrayList<String>();
int size = 0;
PrintWriter writer = new PrintWriter(System.out, true); // Just as example
for (String str : strings)
{
size += str.length();
if (size > MAX_CHARACTERS)
{
writer.print(System.getProperty("line.separator") + str);
size = 0;
}
else
writer.print(str);
}
}
您可以简单地编写一个函数,例如”void printWordWrap(List<String> strings)
“,里面有那个算法。我认为,解决您的问题的好方法。:)