删除所有其他字符串条目

时间:2013-07-24 11:04:14

标签: java string

我从XML文件中收集了som数据,现在我正在尝试编辑数据以使其适合我的程序。我收集的数据说明了给定参数的最小值和最大值,但我只对最小值或最大值感兴趣。

XML数据源如下所示:

<tolerated>
    <UMIN2> [ 181.2 186.8 ] </UMIN2>
    <T_UMIN2> [ 0.4 0.6 ] </T_UMIN2>
    <UMIN1> [ 197 203 ] </UMIN1>
    <T_UMIN1> [ 2.4 2.6 ] </T_UMIN1>
    <UMAX1> [ 249.2 256.8 ] </UMAX1>
    <T_UMAX1> [ 0.9 1.1 ] </T_UMAX1>
    <UMAX2> [ 260 268 ] </UMAX2>
    <T_UMAX2> [ 0.4 0.6 ] </T_UMAX2>
</tolerated>

我已经让我的程序通过此代码

将此数据加载到名为tol的字符串中
public static String tolerance() throws SAXException, IOException, ParserConfigurationException, XPathExpressionException{
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(O1.replace("\\","\\\\"));
        XPathFactory xpf = XPathFactory.newInstance();
        XPath xpath = xpf.newXPath();

        String tTemp = new String();

        XPathExpression expr1 = xpath.compile("ptfGen/body/gridCode/"+header2.substring(31,header2.length()-23)+"/tolerated");
        Node nodeGettingChanged1 = (Node) expr1.evaluate(doc, XPathConstants.NODE);

        String toldata = new String();

        NodeList childNodes1 = nodeGettingChanged1.getChildNodes();
        for (int i = 0; i != childNodes1.getLength(); i++)
        {
            Node child = (Node) childNodes1.item(i);
            if (!(child instanceof Element))
                continue;

            if (child.getNodeName().equals("tolerated"));{
                toldata = child.getFirstChild().getNodeValue();

                tTemp += toldata.substring(3,toldata.length()-3).replace(" ", "\n") + "\n";
            }
            tol = tTemp;
        }
       return tTemp;
    }

这为我提供了换行符分隔的所有值。

我的问题现在可以/我如何删除所有其他条目,以便我只有最小值或最大值?'

我现在得到的输出类似于

tol = {“181.2 \ n186.8 \ n0.4 \ n0.6 \ n197 \ n ..........”};

我正在寻找的是

tol = {“181.2 \ n0.4 \ n197 \ n ..........”};

2 个答案:

答案 0 :(得分:1)

如果最小值始终为第一个,则最大值始终为秒。

您需要做的就是改变

tTemp += toldata.substring(3,toldata.length()-3).replace(" ", "\n") + "\n";

tTemp += toldata.substring(3,toldata.length()-3).split(" ")[c] + "\n";

其中c为第一个(最小)为0,第二个(最大)为1。

或更简单的

tTemp += toldata.split(" ")[c] + "\n";

其中c在各自的情况下为2或3。

这当然假设字符串始终采用完全相同的形式:" [ number number ] "(在完全相同的位置始终具有完全相同的空格量)。一个简单的regular expression "\\s+"代替" "将允许一个或多个空格,即:

tTemp += toldata.split("\\s+")[c] + "\n";

\s表示空格,+表示一个或多个。额外的\是为了逃避编译器的\

答案 1 :(得分:0)

我会做以下事情:

  1. 定义一个容纳临时符的类:

    public static class TempEntry {
        private final String min, max;
    
        public TempEntry(min, max){
            this.min = min;
            this.max = max;
        }
    
        public String getMin(){
            return min;
        }
    
        public String getMax(){
            return max;
        }
    }
    
  2. 解析时,拆分节点中的文本并创建新的TempEntry

  3. 解析器可以返回不可变的List<TempEntry>TempEntry[]数组。

  4. 现在创建一个方法或新类,遍历列表并根据参数进行漂亮打印(只有分钟,只有最大,两者等)

  5. 这样您就不会将解析逻辑与表示逻辑(可能更频繁地更改)结合起来。