java中标记内的String长度

时间:2018-01-11 07:35:12

标签: java xml substring

我们需要在java中找到标签内标签名称的长度 {Student}{Subject}{Marks}100{/Marks}{/Subject}{/Student} 所以学生标签的长度为7,主题标签的长度为7,标记的长度为5。

我正在尝试拆分标签,然后找到标签内每个字符串的长度。

但是我正在尝试的代码只给出了第一个标签名称,而不是其他名称。

你可以帮我解决这个问题吗?

我是java的新手。如果这是一个非常愚蠢的问题,请告诉我。

代码部分:

System.out.println(
    getParenthesesContent("{Student}{Subject}{Marks}100{/Marks}{/Subject}{/Student}"));

public static String getParenthesesContent(String str) {
    return str.substring(str.indexOf('{')+1,str.indexOf('}'));
}

3 个答案:

答案 0 :(得分:1)

您可以将模式与此正则表达式\\{(\[a-zA-Z\]*)\\}一起使用:

2018-01-30T18:30:00.000Z

输出

String text = "{Student}{Subject}{Marks}100{/Marks}{/Subject}{/Student}";

Matcher matcher = Pattern.compile("\\{([a-zA-Z]*)\\}").matcher(text);
while (matcher.find()) {
    System.out.println(
            String.format(
                    "tag name = %s, Length = %d ",
                    matcher.group(1),
                    matcher.group(1).length()
            )
    );
}

答案 1 :(得分:0)

是使用正则表达式,找到模式并应用它。

答案 2 :(得分:0)

您可能想尝试另一个正则表达式:

String s = "{Abc}{Defg}100{Hij}100{/Klmopr}{/Stuvw}"; // just a sample String
Pattern p = Pattern.compile("\\{\\W*(\\w++)\\W*\\}");
Matcher m = p.matcher(s);
while(m.find()) {
    System.out.println(m.group(1) + ", length: " + m.group(1).length());
}

输出你得到:

Abc, length: 3
Defg, length: 4
Hij, length: 3
Klmopr, length: 6
Stuvw, length: 5

如果你需要使用charAt()遍历输入字符串,你可能想考虑使用这样的东西(我在代码的注释中做了一些解释):

String s = "{Student}{Subject}{Marks}100{/Marks}{/Subject}{/Student}";
ArrayList<String> tags = new ArrayList<>();
for(int i = 0; i < s.length(); i++) {
    StringBuilder sb = new StringBuilder(); // Use StringBuilder and its append() method to append Strings (it's more efficient than "+=")      String appended = ""; // This String will be appended when correct tag is found
    if(s.charAt(i) == '{') { // If start of tag is found...
        while(!(Character.isLetter(s.charAt(i)))) { // Skip characters that are not letters
        i++;
        }
        while(Character.isLetter(s.charAt(i))) { // Append String with letters that are found
            sb.append(s.charAt(i));
            i++;
        }
        if(!(tags.contains(sb.toString()))) { // Add final String to ArrayList only if it not contained here yet
            tags.add(sb.toString());
        }
    }
}
for(String tag : tags) { // Printing Strings contained in ArrayList and their length
    System.out.println(tag + ", length: " + tag.length());
}

输出你得到:

Student, length: 7
Subject, length: 7
Marks, length: 5