Java 执行子字符串操作时包含分隔符
在执行子字符串操作时,如何包含分隔符 i、 e.给定字符串Java 执行子字符串操作时包含分隔符,java,xml,Java,Xml,在执行子字符串操作时,如何包含分隔符 i、 e.给定字符串message,如下所示: <nutrition> <daily-values> <total-fat units="g">65</total-fat> <saturated-fat units="g">20</saturated-fat> <cholesterol units="mg">300</cholesterol>
message
,如下所示:
<nutrition>
<daily-values>
<total-fat units="g">65</total-fat>
<saturated-fat units="g">20</saturated-fat>
<cholesterol units="mg">300</cholesterol>
<sodium units="mg">2400</sodium>
<carb units="g">300</carb>
<fiber units="g">25</fiber>
<protein units="g">50</protein>
</daily-values>
</nutrition>
<food>
<name>Avocado Dip</name>
<mfr>Sunnydale</mfr>
<serving units="g">29</serving>
<calories total="110" fat="100"/>
<total-fat>11</total-fat>
<saturated-fat>3</saturated-fat>
<cholesterol>5</cholesterol>
<sodium>210</sodium>
<carb>2</carb>
<fiber>0</fiber>
<protein>1</protein>
<vitamins>
<a>0</a>
<c>0</c>
</vitamins>
<minerals>
<ca>0</ca>
<fe>0</fe>
</minerals>
</food>
65
20
300
2400
300
25
50
牛油果蘸酱
萨尼代尔
29
11
3.
5.
210
2.
0
1.
0
0
0
0
然后
message = message.substring(message.indexOf("<food>"), message.indexOf("</food>"));
message=message.substring(message.indexOf(“”),message.indexOf(“”);
返回
<food>
<name>Avocado Dip</name>
<mfr>Sunnydale</mfr>
<serving units="g">29</serving>
<calories total="110" fat="100"/>
<total-fat>11</total-fat>
<saturated-fat>3</saturated-fat>
<cholesterol>5</cholesterol>
<sodium>210</sodium>
<carb>2</carb>
<fiber>0</fiber>
<protein>1</protein>
<vitamins>
<a>0</a>
<c>0</c>
</vitamins>
<minerals>
<ca>0</ca>
<fe>0</fe>
</minerals>
牛油果蘸酱
萨尼代尔
29
11
3.
5.
210
2.
0
1.
0
0
0
0
如果我不知道XML文件的周围内容,如何让它保留最后一个
标记?这里有一个使用javax.XML
的解决方案。它旨在解决文档中存在多个
元素的情况。为了正确处理此情况,您需要
org.w3c.dom.Document
节点列表提取为org.w3c.dom.NodeList
private static final String XML =
"<?xml version = \"1.0\" encoding = \"UTF-8\"?>\n"
+ "<message>\n"
+ " <food>\n"
+ " <name>A</name>\n"
+ " </food>\n"
+ " <food>\n"
+ " <name>B</name>\n"
+ " </food>\n"
+ "</message>\n";
@Test
public void xpath() throws Exception {
// Deserialize
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document document;
try (InputStream in = new ByteArrayInputStream(XML.getBytes(StandardCharsets.UTF_8))) {
document = factory.newDocumentBuilder().parse(in);
}
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xPath.compile("//food");
NodeList nodeList = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
System.out.println(node.getNodeName() + ": " + node.getTextContent().trim());
}
// Serialize
Document exportDoc = factory.newDocumentBuilder().newDocument();
Node exportNode = exportDoc.importNode(nodeList.item(0), true);
exportDoc.appendChild(exportNode);
String content = serialize(exportDoc);
System.out.println(content);
}
private static String serialize(Document doc) throws TransformerException {
DOMSource domSource = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
// set indent
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(domSource, result);
return writer.toString();
}
第二个输出显示第一个元素被序列化回字符串:
<food>
<name>A</name>
</food>
A.
您是否尝试过:message.indexOf(“”+7
抱歉输入错误!感谢您的注意:)如果
是消息的最后一部分,为什么不从消息中做一个子字符串。indexOf(“”)
,因为它将从该索引一直到最后?Ben的解决方案对您有效吗?这个消息怎么样?replaceAll(\\r |\\n)”,“”)。子字符串(message.indexOf(“”),message.indexOf(“”),message.indexOf(“”)代码>。删除行尾会将其视为一个单行字符串。
<food>
<name>A</name>
</food>