Java:从文件中解析行

时间:2016-09-01 17:23:11

标签: java string parsing file-read

我需要一些想法。我有一个包含以下信息的文件:

AAA222BBB% CC333DDDD% EEEE444FF%

'%' sign就像"行尾"

的指示符

我想读取每一行,然后解析它以适合某种格式(4个字母,3个数字和4个字母) - 所以如果它看起来像上面那样,它应该插入一个特殊符号或空格来填充,像这样:

AAA-222BBB-% CC - 333DDDD% EEEE444FF - %

我的第一个想法就是将每一行都读成一个字符串。然后是一些巨大的if语句,如

For each line:
{
    if (first symbol !abc...xyz) {
        insert -
    }

    if (second symbol !abc...xyz) {
        insert -
    }
}

但是,我确信必须有更优雅和有效的方法,才能真正解析文本,但我不确定如何。所以,如果有人有个好主意,请赐教: - )

最佳

1 个答案:

答案 0 :(得分:1)

我的第一个建议是阅读这篇文章(扫描仪和正则表达式的好解释):     How do I use a delimiter in Java Scanner?

然后我的解决方案(确定它是最聪明的,但它应该工作)

For each line:
{
    Scanner scan = new Scanner(line);
    scan.useDelimiter(Pattern.compile("[0-9]"));
    String first = scan.next();

    scan.useDelimiter(Pattern.compile("[A-Z]"));
    String second = scan.next();

    scan.useDelimiter(Pattern.compile("[0-9]"));
    String third = scan.next();

    scan.close();

    System.out.println(addMissingNumber(first, 4) + addMissingNumber(second, 3) + addMissingNumber(third, 4));
}

 //For each missing char add "-"
 private static String addMissingNumber(String word, int size) {
    while (word.length() < size) {
        word = word.concat("-");
    }
    return word;
 }

输出:“ AAA-222BBB -