Java,将文本排成行

时间:2013-10-26 01:01:57

标签: java

我正在编写一个代码,该代码从文件中读取文本,然后将其排序为最大特定宽度的行。

示例:包含“aaaa bbbb cccc dddd”的文本

指定的宽度为16

所以输出应该是

aaaa bbbb cccc //width is only 14, if dddd is added, it would be longer than 16.

dddd

我的方法:阅读文本并将其分配给字符串

Scanner input_OUT = new Scanner(new File("abc"));

PrintStream output = new PrintStream("abc");
.
.


 while (input_OUT.hasNextLine()) {
            str = input_OUT.nextLine();
        }

String s = "";

while(input_OUT.hasNext()) { // get words if it still have

            if (s.length() + input_OUT.next().length() > width) { 
                s = str.substring(0,s.length());
                output.println(s);
                str = str.substring(s.length()+1,str.length());
                s = "";
            }
            else {
                s += input_OUT.next();
            }

        }

虽然它编译。但该文件没有显示任何输出。我认为我的代码不对。我知道有stringbuild,string split,array的选项。但我现在可以这么做了。

1 个答案:

答案 0 :(得分:0)

第一个问题是在这个循环中,假设从文件中扫描了多个东西,这种方法将不起作用。

String str;
while (input_OUT.hasNextLine()) {
   str = input_OUT.nextLine();
}

您所做的只是将str重置为下一个扫描的元素。

更好的方法是将文件输入存储到字符串数组中。

String str;   
String S[] = new String[#stringsInFile];
int i = 0;
while (input_OUT.hasNextLine()) {
   str = input_OUT.nextLine();
   S[i] = str;
   i++
}

现在你所要做的就是操纵数组S [],然后输出到你的输出文件。

在评论中注意到你说你不能一个数组。让我们继续添加到S,然后允许您对S执行操作。方法:

 String str;
 String S = "";    
 while (input_OUT.hasNextLine()) {
    str = input_OUT.nextLine();
    S = S +" "+ str; //This will keep adding onto S until hasNextLine is false
 }