从大字符串中获取特定的子字符串

时间:2011-07-16 08:56:22

标签: java xml regex substring

<emp>
<name>Jhon</name>
<sal>2000</sal>
</emp>

我将把这个xml作为字符串。我需要从字符串生成一个xml文件,我需要命名生成的xml文件名为tag.eg:Jhon.xml.please为我提供了一些指示来做同样的事情java没有使用解析器。

2 个答案:

答案 0 :(得分:2)

使用字符串子字符串或正则表达式解析文件。我认为你的意思是你不想解析每一个细节。

如果您知道每个元素都在一条线上,您可以使用以下方法。

BufferedReader br = 
String line;
while((line = br.readLine()) != null) {
    String[] parts = line.split("[<>]");
    String tag = parts[1];
    String value = parts[2];
    if ("name".equals(tag)) {

    } else if ("ruleId".equals(tag)) {

    } else if ("ruleVersion".equals(tag)) {

    }
}

答案 1 :(得分:0)

虽然在xml上使用正则表达式时需要谨慎...这将在一行中执行:

String filename = input.replaceAll("(?s).*<name>(.*)</name>.*<ruleId>(.*)</ruleId>.*<ruleVersion>(.*)</ruleVersion>.*", "$1_$2_$3.xml");

(?s)很重要 - 它会打开“点匹配换行符”开关,因此您的输入可以包含多行(即嵌入的换行符),但可以视为一行。

以下是您可以运行此行的测试:

public static void main(String[] args) throws Exception
{
    String input = "<name>remove use case</name>\n    <ruleId>2161</ruleId>\n    <ruleVersion>0.0.1</ruleVersion>\n    <ruleStatus>New</ruleStatus>\n    <nuggetId>489505737</nuggetId>\n    <icVersionId>50449</icVersionId>\n    <rlVersion>1.0</rlVersion>\n    <modelVersion>1.0</modelVersion>\n    <attributes>\n        <attribute>\n            <attributeName/>\n            <value/>\n        </attribute>\n    </attributes>\n    <notes></notes>";
    String filename = input.replaceAll("(?s).*<name>(.*)</name>.*<ruleId>(.*)</ruleId>.*<ruleVersion>(.*)</ruleVersion>.*", "$1_$2_$3.xml");
    System.out.println(filename);
}

输出:

remove use case_2161_0.0.1.xml