0

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

"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();
4

2 回答 2

0

首先,由于在大写标记之间可以有多个字符串,因此您需要返回一组字符串。我选择了一个列表。

其次,您需要使用 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;
}
于 2013-04-04T17:00:20.853 回答
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;
}
于 2013-04-04T17:41:24.863 回答