无法显示标签

时间:2012-12-17 11:53:53

标签: java

好的,我正在关注我一周前发布的另一个问题。 Unable to parse ^ character

我目前的情况是,现在我能够解析所需的正则表达式并创建后续元素。我为每种元素类型创建了标签。

例如我的输入字符串是A | 1 | 2 | 3 ^ 4 | B || 1 | 2 | 3 ^ 4 ^ 5

所以我在这个字符串中的标签是A和B

我的输出应为(预期)

A1      1 
A2      2
A3.1    3 
A3.2    4
B1      (BLANK) //not B
B2      1
B3      2
B4.1    3
B4.2    4
B4.3    5

原因B1应为空白,因为输入为B || 1 | 2。 我目前的输出将是

element1    A
element2    1
element3.1  2
element3.2  3
element4    4
element5    B
element6     
element7.1  2
element7.2  3
element7.3  4
element7.4  5

基本上,我正在尝试构建一个HL7解析器。使用准确标签进行替换以避免混淆并保持机密性。代码如下。

  

public class Parser {

public static final String ELEMENT_DELIM_REGEX = "\\|";

public static void main(String[] args) {
    String input = "A|1|2|3^4|";
    String[] tokens = input.split(ELEMENT_DELIM_REGEX);
    Element[] elements = new Element[tokens.length];
    for (int i = 0; i < tokens.length; i++) {
        elements[i] = new Element(i + 1, tokens[i]);
    }
    for (Element element : elements) {
        System.out.println(element);
    }
}
     

}

Element.java
  

公共类元素{

public static final String SUB_ELEMENT_DELIM_REGEX = "\\^";

private int number;

private String[] content;

public Element(int number, String content) {
    this.number = number;
    this.content = content.split(SUB_ELEMENT_DELIM_REGEX);
}

@Override
public String toString() {
    if (content.length == 1) {
        return "Element " + number + "\t" + content[0];
    }
    StringBuilder str = new StringBuilder();
    for (int i = 0; i < content.length; i++) {
        str.append("Element " + number + "." + (i+1) + "\t" + content[i] + "\n");   
    }
    // Delete the last \n
    str.replace(str.length() - 1, str.length(), "");
    return str.toString();
} }

1 个答案:

答案 0 :(得分:1)

这可以通过两个类中的一些小变化来实现:(问我,如果你不理解代码中发生了什么,我只写了几条评论,但试图让它自我解释)

public class Parser {

    public static final String ELEMENT_DELIM_REGEX = "\\|";

    public static void main(String[] args) {
        String input = "A|1|2|3^4|B||1|2|3^4^5";
        String[] tokens = input.split(ELEMENT_DELIM_REGEX);
        List<Element> elements = new ArrayList<Element>();
        String currentTag = "";
        int elementCounter = 1;
        for (int i = 0; i < tokens.length; i++) {
            if (tokens[i].matches("\\p{Alpha}+")) {
                currentTag = tokens[i];
                elementCounter = 1;
                continue;
            }
            elements.add(new Element(elementCounter++, currentTag,  tokens[i]));
        }
        for (Element element : elements) {
            System.out.println(element);
        }
    }
}

public class Element {

    public static final String SUB_ELEMENT_DELIM_REGEX = "\\^";

    private int number;

    private String[] content;

    private String tag;

    public Element(int number, String tag, String content) {
        this.number = number;
        this.content = content.split(SUB_ELEMENT_DELIM_REGEX);
        this.tag = tag;
    }

    @Override
    public String toString() {
        if (content.length == 1) {
            return tag + "" + number + "\t" + content[0];
        }
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < content.length; i++) {
            str.append(tag + "" + number + "." + (i+1) + "\t" + content[i] + "\n");   
        }
        // Delete the last \n
        str.replace(str.length() - 1, str.length(), "");
        return str.toString();
    } 
}

输出(输入A|1|2|3^4|B||1|2|3^4^5

A1      1
A2      2
A3.1    3
A3.2    4
B1  
B2      1
B3      2
B4.1    3
B4.2    4
B4.3    5