0

我想知道如何限制每行中的字符。如果下一个单词太长而无法放入 - 例如 12 个字符的行,那么它进入下一行。

import java.io.File;
import java.util.Scanner;

public class Programme {
    public static void main(String[] args)throws Exception {
        method1(args[0],args[1]);

    }
    public static void method1(String file, String n)throws 
Exception{
        Scanner sc = new Scanner(new File(file));
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            String [] splitv = line.split(" ");
            char[] splitv2 = line.toCharArray();
            for (int i=0;i<Integer.parseInt(n);i++){
                System.out.print(splitv2[i]);
            }
            System.out.println("");
        }
    }    
}

这是一个未完成的程序,我希望它能够工作,例如它得到一个文本文件,其文本如下,第二个参数“n”为 12:

01 23 456 789 012 3 4 
56 78 9 0 12 34 56 789

程序输出将是:

01 23 456
789 012 3 4
56 78 9 0 12
34 56 789

空格也是一个很重要的字符,在这种情况下,789 不适合 12 个字符的行,所以它会打印在下一行。

4

1 回答 1

3

将您的输入连接成一个字符串,然后用于lastIndexOf(' ', 12)查找要中断的空间。

String input = "01 23 456 789 012 3 4 56 78 9 0 12 34 56 789";
while (input.length() > 12) {
    int idx = input.lastIndexOf(' ', 12);
    System.out.println(input.substring(0, idx));
    input = input.substring(idx + 1);
}
System.out.println(input);

输出

01 23 456
789 012 3 4
56 78 9 0 12
34 56 789

如果文本可以包含长词,则需要额外的逻辑来防范它们。

String input = "123456789012345 6 789012345678901 234 567 8 9 01 23 4 5 67 89 01 234567890123456";
while (input.length() > 12) {
    int idx = input.lastIndexOf(' ', 12);
    if (idx == -1) { // too long word
        idx = input.indexOf(' ', 12);
        if (idx == -1) // last word
            break;
    }
    System.out.println(input.substring(0, idx));
    input = input.substring(idx + 1);
}
System.out.println(input);

输出

123456789012345
6
789012345678901
234 567 8 9
01 23 4 5 67
89 01
234567890123456

如果文本可以包含连续的空格,则应先消除它们。

input = input.replaceAll("\\s+", " ").trim();
于 2018-05-18T23:16:17.943 回答