Java 格式化文本

Java 格式化文本,java,string,Java,String,我有几个问题。我正在尝试将我的文本格式化为一种简单的阅读格式。我目前有: MAC11053hrsECO20133hrsECO20233hrsANT20003hrsPSY20123hrsSYG20003hrsACG20213hrsACG20713hrsCGS21003hrsECO20133hrsECO20233hrsECO34013hrsMAC22333hrsSTA20233hrsACG31313hrsECO34113hrsFIN34033hrsMAN30253hrsMAR30233hrsBUL

我有几个问题。我正在尝试将我的文本格式化为一种简单的阅读格式。我目前有:

 MAC11053hrsECO20133hrsECO20233hrsANT20003hrsPSY20123hrsSYG20003hrsACG20213hrsACG20713hrsCGS21003hrsECO20133hrsECO20233hrsECO34013hrsMAC22333hrsSTA20233hrsACG31313hrsECO34113hrsFIN34033hrsMAN30253hrsMAR30233hrsBUL31303hrsGEB33753hrsMAR32033hrsACG31413hrsACG33613hrsACG44013hrsACG46513hrsACG48033hrsMAN47203hrsACG49033hrsACG49043hrsACG49703hrsENC11013hrsMAC11053hrsECO20133hrsENC11023hrsECO20233hrsACG20213hrsSPC16083hrsACG20713hrsECO34013hrsCGS21003hrsACG31313hrsFIN34033hrsMAR30233hrsECO34113hrsMAN30253hrsACG31413hrsACG33613hrsBUL31303hrsACG44013hrsGEB33753hrsMAR32033hrsACG46513hrsACG48033hrsMAN47203hrs
我想:

MAC1105 3hrs
ECO2013 3hrs
ect.
到目前为止,我的代码糟透了!我一直在试图弄明白这一点,但我似乎无法使用任何其他帖子来解决一个似乎相当简单的问题。我实际上是在阅读每一行,然后尝试插入
“\n”
,以格式化输出。我想使用for循环
intd
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Indentation {

    public static void main(String[] args) throws IOException {
        File inFile = new File("/Users/Richard/Desktop/resources/Out.txt");

        File outFile = new File("/Users/Richard/Desktop/resources/finally.txt");

        FileWriter fWriter = new FileWriter(outFile);
        PrintWriter pWriter = new PrintWriter(fWriter);

        Scanner sc = new Scanner(inFile);
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            String s = line;
            StringBuilder sb = new StringBuilder(s);

            for (int d = 1; d < 61; d++) {
                sb.insert(d * 7, " ");
                sb.insert(d * 12, "\n");
            }

            pWriter.print(sb.toString());
            System.out.println(sb.toString());
        }
        sc.close();

    }

}
导入java.io.File;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.util.Scanner;
公共类缩进{
公共静态void main(字符串[]args)引发IOException{
File infle=新文件(“/Users/Richard/Desktop/resources/Out.txt”);
File outFile=新文件(“/Users/Richard/Desktop/resources/finally.txt”);
FileWriter fWriter=新的FileWriter(输出文件);
PrintWriter pWriter=新的PrintWriter(fWriter);
扫描仪sc=新扫描仪(填充);
while(sc.hasNextLine()){
字符串行=sc.nextLine();
字符串s=行;
StringBuilder sb=新的StringBuilder;
对于(int d=1;d<61;d++){
sb.插入(d*7,“”);
sb.插入(d*12,“\n”);
}
印刷机印刷(某人印刷);
System.out.println(sb.toString());
}
sc.close();
}
}

您会发现正则表达式的概念在这里非常有用。从一些好的教程中阅读更多关于它的信息,例如

此外,您还需要对输入进行一些假设。例如,课程代码始终为三个“单词字符”,后跟四位数字。持续时间(
hrs
)始终是一个一位或两位数字,后跟字符串“hrs”,等等。一旦有了这个数字,就可以对正则表达式进行如下编码 我的资料如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ScanText1 {

    public static void main(String[] args) {
        String input = "MAC11053hrsECO20133hrsECO20233hrsANT20003hrsPSY20123hrsSYG20003hrsACG20213hrsACG20713hrsCGS21003hrsECO20133hrsECO20233hrsECO34013hrsMAC22333hrsSTA20233hrsACG31313hrsECO34113hrsFIN34033hrsMAN30253hrsMAR30233hrsBUL31303hrsGEB33753hrsMAR32033hrsACG31413hrsACG33613hrsACG44013hrsACG46513hrsACG48033hrsMAN47203hrsACG49033hrsACG49043hrsACG49703hrsENC11013hrsMAC11053hrsECO20133hrsENC11023hrsECO20233hrsACG20213hrsSPC16083hrsACG20713hrsECO34013hrsCGS21003hrsACG31313hrsFIN34033hrsMAR30233hrsECO34113hrsMAN30253hrsACG31413hrsACG33613hrsBUL31303hrsACG44013hrsGEB33753hrsMAR32033hrsACG46513hrsACG48033hrsMAN47203hrs";

        Pattern p 
            = Pattern.compile(
                "(?<courseCode>\\w{3}\\d{4})" /* courseCode: 3 word chars plus 4 digits */
                + "(?<hrs>\\d{1,2})hrs"       /* hrs: 1 or 2 digits and then "hrs" */
              );

        Matcher m = p.matcher(input);
        while (m.find()) {
            String courseCode = m.group("courseCode");
            int    hrs        = Integer.parseInt(m.group("hrs"));
            System.out.format("%s %dhrs%n", courseCode, hrs);
        }
    }

}

考虑MAC11053HRS,MAC始终是3位数字码吗?11005总是4?小时数没有超过9小时?我该如何处理此错误?索引20附近的非法重复(?\w{3}\w{d})(?\d{1,2})小时^。刚刚修好了。我更新了上面的帖子。谢谢你的帮助!令人惊讶的是有很多方法可以做一些事情。老实说,我已经用了一整天的各种方法尝试了,但我就是没能做到。我很高兴你用了regex!我在代码中为正则表达式添加了更好的注释(在
p
的行中)。这应该使它更容易阅读。正则表达式很有趣。你会喜欢的:-)
MAC1105 3hrs
ECO2013 3hrs
ECO2023 3hrs
ANT2000 3hrs
PSY2012 3hrs
...