将标记之间的文本更改为大写java

时间:2013-04-04 16:29:15

标签: java tags case

我需要在字符串中将标签之间的文本更改为大写,然后使用更改的字母打印整个字符串。所以

"asdasd <upcase>something</upcase> dfldkflskdf <upcase>stuff</upcase>skdlskd" would become: 
"asdasd SOMETHING dfldkflskdf STUFF skdlskd"

到目前为止,我得到了这个,但它仅从标签的第一个发生处返回文本。

static String tags (String word)
    {
        String changed = word;

        while (changed.indexOf("<upcase>" ) >= 0)
                {
                changed = (changed.substring(changed.indexOf("<upcase>")+"<upcase>".length(),changed.indexOf("</upcase>")));
                }
        return changed.toUpperCase();

2 个答案:

答案 0 :(得分:0)

首先,由于upcase标记之间可以有多个字符串,因此需要返回一个字符串集合。我选择了一个List。

其次,您需要使用String indexOf(string,pos)方法,这样您就不会丢失XML字符串中的位置。

这是做你想做的事的一种方法。

public List<String> tags(String xml) {
    List<String> list = new ArrayList<String>();
    String startTag = "<upcase>";
    String endTag = "</upcase>";
    int sPos = xml.indexOf(startTag);
    while (sPos >= 0) {
        int ePos = xml.indexOf(endTag, sPos + startTag.length());
        if (ePos >= 0) {
            list.add(xml.substring(sPos + startTag.length(), ePos)
                    .toUpperCase());
        }
        sPos = xml.indexOf(startTag, ePos + endTag.length());
    }
    return list;
}

答案 1 :(得分:0)

好的,这是更新版本:

public static String tags(String xml) {
    final String upcaseTagRegex = "<upcase>(.*?)</upcase>";
    String result = xml;
    Pattern pattern = Pattern.compile(upcaseTagRegex, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher matcher = pattern.matcher(xml);

    while(matcher.find()) {
        result = result.replaceFirst(upcaseTagRegex, matcher.group(1).toUpperCase());
    }

    return result;
}