如题
现有一字符串
<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>
想单独把里面的四组数字提取出来给四个变量
现求大家意见
可以取两个空格之间的部分
也可以取<***></***>之间的部分
各位大虾帮帮小菜鸟吧
补充下这个是个JSP问题,谢谢各位撒

解决方案 »

  1.   

    LZ您这是什么字符串呀 怎么看怎么象XML
      

  2.   

    如果是一完整的xml文件,用jdom,DOM4J去解析
    否则用String.split(String regex)函数,参数regex是正规式,有点麻烦,看帮助吧
      

  3.   

    就是XML格式的,有什么好办法吗??
      

  4.   

    import org.xml.sax.Attributes;
    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.SAXException;
    import java.util.Properties;//使用DefaultHandler的好处 是 不必陈列出所有方法,
    public class ConfigParser extends DefaultHandler {////定义一个Properties 用来存放 dbhost dbuser dbpassword的值
    private Properties props;private String currentSet;
    private String currentName;
    private StringBuffer currentValue = new StringBuffer();//构建器初始化props
    public ConfigParser() {this.props = new Properties();
    }public Properties getProps() {
    return this.props;
    }//定义开始解析元素的方法. 这里是将 中的名称xxx提取出来.
    public void startElement(String uri, String localName, String qName, Attributes attributes)
    throws SAXException {
    currentValue.delete(0, currentValue.length());
    this.currentName =qName;}//这里是将 之间的值加入到currentValuepublic void characters(char[] ch, int start, int length) throws SAXException {currentValue.append(ch, start, length);}//在遇到 结束后,将之前的名称和值一一对应保存在props中public void endElement(String uri, String localName, String qName) throws SAXException {props.put(qName.toLowerCase(), currentValue.toString().trim());
    }} import java.util.Properties;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import java.net.URL;public class ParseXML{//定义一个Properties 用来存放 dbhost dbuser dbpassword的值
    private Properties props;//这里的props
    public Properties getProps() {
    return this.props;
    }public void parse(String filename) throws Exception {//将我们的解析器对象化
    ConfigParser handler = new ConfigParser();//获取SAX工厂对象
    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setNamespaceAware(false);
    factory.setValidating(false);//获取SAX解析
    SAXParser parser = factory.newSAXParser();//得到配置文件myenv.xml所在目录. tomcat中是在WEB-INF/classes
    //下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替或定义
    URL confURL = BeansConstants.class.getClassLoader().getResource(filename);try
    {
    //将解析器和解析对象myenv.xml联系起来,开始解析
    parser.parse(confURL.toString(), handler);
    //获取解析成功后的属性 以后 我们其他应用程序只要调用本程序的props就可以提取出属性名称和值了
    props = handler.getProps();
    }finally{
    factory=null;
    parser=null;
    handler=null;
    }}}
      

  5.   

    <%@ page contentType="text/html; charset=gb2312" %>  
    <%@ page import="java.io.*" %>  
    <%@ page import="java.util.*" %>  
    <%@ page import="org.w3c.dom.*" %>  
    <%@ page import="javax.xml.parsers.*" %>  <html> <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
    <meta name="GENERATOR" content="Microsoft FrontPage 4.0">  
    <meta name="ProgId" content="FrontPage.Editor.Document">  
    <title>Test</title> 
    </head> <body> 
    <% 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
    DocumentBuilder db = dbf.newDocumentBuilder();  
    Document doc = db.parse(application.getRealPath("/")+System.getProperty("file.separator")+"message.xml");  
    NodeList nl = doc.getElementsByTagName("message");  
    Node my_node = nl.item(0);  
    String message = my_node.getFirstChild().getNodeValue();  
    %>
      

  6.   

    上面这两个都是获得 XML数据的方法 用DOM SAX都可以 还有个JDOM方法 LZ可以到DAIBU 查下
      

  7.   

    String test = "<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>";
            int i = 1, a = 0, b = 0, c = 0;
            String result = "";
            while (i < 5) {
                a = test.indexOf(">");
                b = test.indexOf("<", a);
                result = test.substring(a + 1, b);
                System.out.println("第" + i + "个字段为:" + result);
                c = test.indexOf("<", b + 1);
                if (c == -1) break;
                test = test.substring(c, test.length());
                i++;
            }
      

  8.   

    JS版本:
    <script>
    var str="<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>";
    var reg=/<(.*?)>(.*?)<\/\1>/g;
    var list=new Array();
    str.replace(reg,function(a,b,c){list.push(c);});
    alert(list);
    </script>
      

  9.   

    JAVA版本:
    String str="<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>";
    String reg="<(.*?)>(.*?)<\\/\\1>";
    List list1=new ArrayList();
    List list2=new ArrayList();

    Pattern p=Pattern.compile(reg);

    Matcher m=p.matcher(str);

    while(m.find()){
    list1.add(m.group(1));
    list2.add(m.group(2));
    }

    for(int i=0;i<list1.size();i++){
    System.out.println(list1.get(i)+"="+list2.get(i));
    }
      

  10.   

    本人菜鸟,所以太深奥的看不懂
    谢谢
    issgates(一直很安静)
    给我很大的提示
    终于自己搞出来了
    虽然大家写的都很好,但是我真的看不懂啊
    issgates(一直很安静)谢谢你的思路
    给你50分好了
    其他的大家也会得分
    谢谢大家了
      

  11.   

    用正规则matcher就行了 得到一个数组
    [\d]*?
      

  12.   

    class test
    {
    public static void main(String [] args)
    {
    String test = "<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>";
    String [] array1 = test.split(" ");

    for(String s1 : array1)
    {
    String [] array2 = s1.split(">");

    for(int i=1;i<array2.length;i+=2)
    {
    String [] array3 = array2[i].split("<");

    for(int j=0;j<array3.length;j+=2)
    {
    System.out.println(array3[j]);
    }
    }
    }
    }
    }楼主不识货 lip009(深蓝忧郁) ( ) 和 xizhiyao(流浪的猴子) ( ) 才应该平分100分
      

  13.   

    用String的split方法,或者java.util.StringTokenizer.
    如果你正则表达式用得好一点,用前者,实在不怎么会,用后者.
      

  14.   

    如果你只是想解析这个XML文档,可以用java.util.Properties.这是一个继承于HashTable的类.用着方便呢!
      

  15.   

    顶  lip009(深蓝忧郁) ( ) 和 xizhiyao(流浪的猴子) ( )
    我只会用split
      

  16.   

    我认为 对于字符串提取还是lip009(深蓝忧郁) 的好呀。正则我是奇迹般LJ呀最多写个 ^\w+$还是用在STRUTS的VALIDATE框架里面 那位仁兄有正则的教程 发个给我看看 谢谢[email protected] 再次感谢
      

  17.   

    issgates(一直很安静) 写的不错 真不错以前都只知道使用SPLIT 原来使用SRTING的方法也可以呀  强
      

  18.   

    最简单的
    String a="<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>“String b[] = a.split("</");
    得到<merID>000000000027
    merID> <CheckDate>20070316
    ......
    ...........等等String x = b[0].substring(b[0].lastindexof(">"),b[0].length-b[0].lastindexof(">"));大概就是如此了,
    小问题你调下
      

  19.   

    直接贴给你一个方法吧。我经常用到的。贴进去就直接可以用了!

    /**
     * 获得一对xml标签中的字符串
     * 
     * @param aXMLString
     * @param aTag
     * @return tagValue
     */
    private static String getValueNoNull(String aXMLString, String aTag) {
    String tagValue = "";
    int tStartIndex = aXMLString.indexOf("<" + aTag.trim() + ">");
    int tEndIndex = aXMLString.indexOf("</" + aTag.trim() + ">");
    if (tStartIndex >= 0 && tEndIndex >= 0 && tStartIndex < tEndIndex) {
    tagValue = new String(aXMLString.substring(tStartIndex + aTag.length() + 2, tEndIndex));
    }
    return tagValue;
    }
      

  20.   

    你可看一下这个输出结果.让后学习一下正则表达式:)对你以后的学习很有好处.
    String s = "<ert>0909000</ert><gg>9839842</gg><ul>208424</ul><pop>203402</pop>";
    java.util.regex.Pattern p = 
        java.util.regex.Pattern.compile("<([\\w]+)>([\\w]+)</\\1>");
    java.util.regex.Matcher m = p.matcher(s);
    while(m.find()){
       for(int i=1;i<=m.groupCount();i++)
           System.out.println(m.group(i));
    }
      

  21.   

    String str = "<merID>000000000027</merID> <CheckDate>20070316</CheckDate> <orderNum>0000000009</orderNum> <orderAmt>111</orderAmt>";
            String reg = "<(\\w+?)>(\\d+?)<\\/\\1>";
            List list1 = new ArrayList();
            List list2 = new ArrayList();        Pattern p = Pattern.compile(reg);        Matcher m = p.matcher(str);        while (m.find()) {
                System.out.println("m.groupCount() = " + m.groupCount());
                list1.add(m.group(1));
                list2.add(m.group(2));
            }        for (int i = 0; i < list1.size(); i++) {
                System.out.println(list1.get(i) + "=" + list2.get(i));
            }
      

  22.   

    赫赫
    我觉得用apache 的Digester 好像更简单哦;org.apache.commons.digester.Digester:)Good Luck.
      

  23.   

    用STRUTS JSTL吧比什么读取XML都方便