使用java在特定点拆分字符串直到特定点
我想拆分下面的字符串以获得预期的输出使用java在特定点拆分字符串直到特定点,java,xml,Java,Xml,我想拆分下面的字符串以获得预期的输出 <?xml version="1.0" encoding="UTF-8" ?> <CompareInformation> <request> <OrderInformation> <CardTypeUsed>CreditCard</CardTypeUsed> <consu
<?xml version="1.0" encoding="UTF-8" ?>
<CompareInformation>
<request>
<OrderInformation>
<CardTypeUsed>CreditCard</CardTypeUsed>
<consumerId>GIF</consumerId>
</OrderInformation>
</request>
</CompareInformation>
<OrderInformation>
<CardTypeUsed>CreditCard</CardTypeUsed>
<consumerId>GIF</consumerId>
</OrderInformation>
信用卡
GIF
预期产量
<?xml version="1.0" encoding="UTF-8" ?>
<CompareInformation>
<request>
<OrderInformation>
<CardTypeUsed>CreditCard</CardTypeUsed>
<consumerId>GIF</consumerId>
</OrderInformation>
</request>
</CompareInformation>
<OrderInformation>
<CardTypeUsed>CreditCard</CardTypeUsed>
<consumerId>GIF</consumerId>
</OrderInformation>
信用卡
GIF
对于类似的内容,您确实应该使用适当的XML解析库,但是如果您有这样做,那么在这里简单地使用拆分将是不必要的复杂,因为拆分的目的是,按字面意思用分隔符拆分字符串,因为这里有两个分隔符(
和
)
您可能希望执行以下操作:
公共静态字符串提取(字符串输入、字符串开始、字符串结束){
int length=end.length();
int startIndex=input.indexOf(开始);
//因为indexOf返回找到的第一个字符的索引,
//我们需要添加“end”字符串的长度以获得最后一个字符的索引。
int endIndex=input.indexOf(end)+长度;
返回input.substring(startIndex,endIndex);
}
String result=extract(在“,”中)
您可以阅读有关substring()
的更多信息
请记住,如果多次出现
,此解决方案将不起作用。您需要手动搜索多个实例并返回某种数组。我认为处理XML更适合XML库。要更改XML,您可以使用XSLT,它的好处是它也可以在CLI和其他工具和语言中使用,而无需任何更改。XSLT正是为您所做的事情而构建的—转换XML
如果您确信自己将永远留在应用程序中,那么当然也可以使用一个通用的JavaXML库
以下是您的用例示例:
package org.example;
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.URISyntaxException;
public class XSLTDemo {
public static void main(String[] args) throws IOException, URISyntaxException, TransformerException {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
"<CompareInformation>" +
" <request>" +
" <OrderInformation>" +
" <CardTypeUsed>CreditCard</CardTypeUsed>"+
" <consumerId>GIF</consumerId>"+
" </OrderInformation>"+
" </request>"+
"</CompareInformation>";
String xsltStr = "<?xml version=\"1.0\"?>\n" +
"<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n"+
"<xsl:output method=\"xml\" omit-xml-declaration=\"yes\" />\n" +
" <xsl:template match=\"/\">\n" +
" <xsl:copy-of select=\"/CompareInformation/node()\" />\n" +
" </xsl:template>\n" +
"</xsl:stylesheet>";
TransformerFactory factory = TransformerFactory.newInstance();
Source xslt = new StreamSource(new StringReader(xsltStr));
Transformer transformer = factory.newTransformer(xslt);
Source text = new StreamSource(new StringReader(xml));
StringWriter writer = new StringWriter();
transformer.transform(text, new StreamResult(writer));
System.out.println(writer.toString());
}
}
package org.example;
导入javax.xml.transform.*;
导入javax.xml.transform.stream.StreamResult;
导入javax.xml.transform.stream.StreamSource;
导入java.io.IOException;
导入java.io.StringReader;
导入java.io.StringWriter;
导入java.net.URISyntaxException;
公共类XSLTDemo{
publicstaticvoidmain(字符串[]args)抛出IOException、URISyntaxException、TransformerException{
字符串xml=“”+
"" +
" " +
" " +
“信用卡”+
“GIF”+
" "+
" "+
"";
字符串xsltStr=“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
"";
TransformerFactory=TransformerFactory.newInstance();
Source xslt=newstreamsource(newstringreader(xsltStr));
变压器=工厂新变压器(xslt);
源文本=新的StreamSource(新的StringReader(xml));
StringWriter编写器=新的StringWriter();
transform(文本,新的StreamResult(writer));
System.out.println(writer.toString());
}
}
拆分的标准是什么?看起来它不是拆分的,而是子字符串,看起来您想提取一个XML元素。我想从顶部和底部删除所有请求,从底部删除所有请求。这是否回答了您的问题?