Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 避免在xml元素名称中使用前导数字_Java_Regex_Xml - Fatal编程技术网

Java 避免在xml元素名称中使用前导数字

Java 避免在xml元素名称中使用前导数字,java,regex,xml,Java,Regex,Xml,我希望有一个Java方法来替换xml元素名称中的前导数字。例如,25K需要转换为25K。请看一下我的方法: public static String removeLeadNumbersFromXMLTagElements(String xml) throws TransformerException { Pattern p = Pattern.compile("(<[^>]*?[^[0-9]][^>]*?>)"); Matcher m =

我希望有一个Java方法来替换xml元素名称中的前导数字。例如,
25K
需要转换为
25K
。请看一下我的方法:

public static String removeLeadNumbersFromXMLTagElements(String xml) throws TransformerException {

        Pattern p = Pattern.compile("(<[^>]*?[^[0-9]][^>]*?>)");
        Matcher m = p.matcher(xml);

        StringBuffer result = new StringBuffer();

        while (m.find()) {
            String replace = m.group().replaceAll("[^[0-9]]+", "a");            
            m.appendReplacement(result, replace);
        }

        m.appendTail(result);
        return result.toString();
    }
公共静态字符串removeReadNumbersFromXMLTagElements(字符串xml)引发TransformerException{
Pattern p=Pattern.compile(“(]*?[^[0-9]][^>]*?>)”;
Matcher m=p.Matcher(xml);
StringBuffer结果=新的StringBuffer();
while(m.find()){
字符串replace=m.group();
m、 附件替换(结果,替换);
}
m、 附尾(结果);
返回result.toString();
}

但是我的方法的结果是:
25K
。你能帮我用正确的正则表达式吗?提前谢谢。

所以这并不是您想要的,但它应该可以解决问题。它将获取标签,然后删除任何前导数字,但不删除任何其他内容。此代码替换while循环。您的代码可以识别标记,但是(正如您所指出的)它正在替换所有数字,而不仅仅是前导数字

while (m.find()) {
//System.out.println(m.group());
String work = m.group();
String replace = m.group();
if (work.substring(0, 2).equals("</")) {
    //System.out.println("end tag");
    if (work.length() > 2 && Character.isDigit(work.charAt(2))) {
        replace = "</a";
        int i = 3;
        while (i < work.length() && Character.isDigit(work.charAt(i))) {
            i++;
        }
        replace += work.substring(i);
    }
} else if (work.substring(0, 1).equals("<")) {
    //System.out.println("begin tag");
    if (work.length() > 1 && Character.isDigit(work.charAt(1))) {
        replace = "<a";
        int i = 2;
        while (i < work.length() && Character.isDigit(work.charAt(i))) {
            i++;
        }
        replace += work.substring(i);
    }
}
m.appendReplacement(result, replace);
}
while(m.find()){
//System.out.println(m.group());
串功=m.group();
字符串替换=m.group();
如果(work.substring(0,2).equals(),请尝试使用以下命令:

public static String removeLeadNumbersFromXMLTagElements(String xml) throws TransformerException {

    Pattern p = Pattern.compile("(\\<.*?)[0-9]+(.*?\\>)");
    Matcher m = p.matcher(xml);

    StringBuffer result = new StringBuffer();

    while (m.find()) {
        String replace = m.group(1) + "a" + m.group(2);
        m.appendReplacement(result, replace);
    }

    m.appendTail(result);
    return result.toString();
}
公共静态字符串removeReadNumbersFromXMLTagElements(字符串xml)引发TransformerException{
模式p=Pattern.compile(“(\\)”);
Matcher m=p.Matcher(xml);
StringBuffer结果=新的StringBuffer();
while(m.find()){
字符串替换=m组(1)+“a”+m组(2);
m、 附件替换(结果,替换);
}
m、 附尾(结果);
返回result.toString();
}

我的解决方案:我终于发现
我可以使用字符串replace=m.group().replaceFirst([^[0-9]]+“,“a”)
而不是
replaceAll
。这也很有效!

非常感谢你!很好的解决方案!最好的回复这个解决方案与我的非常相似,谢谢你!最好的问候!