我需要在字符串中将标签之间的文本更改为大写,然后使用更改的字母打印整个字符串。所以
"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();
答案 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;
}