0

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

示例:包含“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 的选项。但我现在被允许这样做。

4

1 回答 1

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[] 然后输出到您的输出文件。

在评论中注意到你说你不能数组。让我们继续添加Sthen 并允许您对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
 }
于 2013-10-26T01:11:59.517 回答