Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获得同一索引的多个子字符串?_Java_Xml_String_Substring - Fatal编程技术网

Java 如何获得同一索引的多个子字符串?

Java 如何获得同一索引的多个子字符串?,java,xml,string,substring,Java,Xml,String,Substring,我想提取和之间的每个区域。由于我编写了一个代码生成器,所以无法定义它出现的频率,因为每个xml都可能不同 我只是在执行时得到空指针,那么我做错了什么 如果没有列表,我会得到第一个区域,但我需要分别使用所有区域 String xmlToString = null; List<String> ComplexTypeList = null; String path = "/path/of/xml"; try {

我想提取
之间的每个区域。由于我编写了一个代码生成器,所以无法定义它出现的频率,因为每个xml都可能不同

我只是在执行时得到空指针,那么我做错了什么

如果没有列表,我会得到第一个区域,但我需要分别使用所有区域

     String xmlToString = null;
     List<String> ComplexTypeList = null;
     String path = "/path/of/xml";
            try {
                xmlToString = FileUtils.readFileToString(new File(path), StandardCharsets.UTF_8);

            } catch (IOException e) {
                e.printStackTrace();
            }
            for (int i = 0; i < headerName.size(); i++) {

                String result = xmlToString.substring(xmlToString.indexOf("<xsd:headerName"), xmlToString.indexOf("</xsd:headerName>") + 18); // +18 so i get </xsd:headerName>
                ComplexTypeList.add(result); // here i get a Nullpointer
            }
String xmlToString=null;
List ComplexTypeList=null;
字符串path=“/path/of/xml”;
试一试{
xmlToString=FileUtils.readFileToString(新文件(路径),StandardCharsets.UTF_8);
}捕获(IOE异常){
e、 printStackTrace();
}
对于(int i=0;iString result=xmlToString.substring(xmlToString.indexOf(“尝试将列表声明为:

List<String> ComplexTypeList = new ArrayList<String>();
List ComplexTypeList=new ArrayList();

您可以使用正则表达式来代替手动搜索
字符串

String str = "<xsd:headerName>  Hello</xsd:headerName><xsd:headerName>World</xsd:headerName><xsd:headerName> and </xsd:headerName>";
Matcher matcher = Pattern.compile("<xsd:headerName>[\\s\\S]*?</xsd:headerName>").matcher(str); // regex pattern
输出:

<xsd:headerName>  Hello</xsd:headerName>
<xsd:headerName>World</xsd:headerName>
<xsd:headerName> and </xsd:headerName>
你好 世界 及
您真的不想使用字符串操作来处理XML。您需要一个合适的XML解析器来转换成某种数据结构,然后可以对其进行编程。基本上,如果您通过字符串处理来处理XML,那么您的代码将不可避免地在某些合法输入上失败。对于一次性的特殊过程,这可能并不重要,但您指定了可以这样说,“每种xml都可能不同”,因此您显然需要更健壮的东西


我的首选方法是始终使用特定于XML的语言(XPath、XSLT、XQuery),但如果您想使用Java,则将XML解析为树结构(我建议使用JDOM2或XOM,但许多人继续使用JDK附带的旧而笨拙的DOM),然后浏览这个树结构。

哦,废话,当然那太愚蠢了。哇,我真的怀疑自己是否真的能做这样的事情。谢谢helping@SamanChandana:我已将您的编辑还原到此问题,您在该问题中似乎提出了与Kuldeep的投票欺诈安排。请不要在此处尝试-版主可以使用工具来帮助检测投票违规行为。@Kuldeep:似乎是这样。请只批准对帖子有附加价值的编辑。至于您的编辑:有一个
indexOf()
的变体,它有一个起始索引,即只需将结束元素的最后一个索引(类似
xmlToString.indexOf()
List<String> result = matcher.results().map(MatchResult::group).collect(Collectors.toList());
result.forEach(System.out::println);
<xsd:headerName>  Hello</xsd:headerName>
<xsd:headerName>World</xsd:headerName>
<xsd:headerName> and </xsd:headerName>