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

わかりました、ここに更新されたバージョンがあります:

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 に答える
0

まず、大文字のタグの間に複数の文字列を含めることができるため、文字列のコレクションを返す必要があります。リストを選びました。

次に、String indexOf(string, pos) メソッドを使用する必要があります。これにより、XML 文字列内での位置が失われません。

これがあなたが望むことをする1つの方法です。

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 に答える