好的,我正在关注我一周前发布的另一个问题。 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(); } }
答案 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