我遇到了困难。我使用以下格式从字符串中读取玩家的名称:
"[PLAYER_yourname]"
我尝试了几个小时,都无法弄清楚如何读取“_”后面且在“]”之前的部分以获取其名称。
我可以得到一些帮助吗?我尝试使用子字符串、分割、正则表达式等方法,但都没有成功。谢谢! :)
顺便说一句:这个问题与其他问题不同,如果我按“_”拆分,我不知道如何在第二个括号处停止,因为我有其他字符串行超过了第二个括号。谢谢!
我遇到了困难。我使用以下格式从字符串中读取玩家的名称:
"[PLAYER_yourname]"
您可以进行以下操作:
String s = "[PLAYER_yourname]";
String name = s.substring(s.indexOf("_") + 1, s.lastIndexOf("]"));
lastIndexOf
。 - Jean Logeart您可以使用子字符串。 int x = str.indexOf('_')
返回 '_' 所在的字符,int y = str.lastIndexOF(']')
返回 ']' 所在的字符。然后您可以执行 str.substring(x + 1, y)
,这将给您从该符号后到单词末尾的字符串,不包括关闭括号。
使用 regex
匹配函数,你可以做到:
String s = "[PLAYER_yourname]";
String p = "\\[[A-Z]+_(.+)\\]";
Pattern r = Pattern.compile(p);
Matcher m = r.matcher(s);
if (m.find( ))
System.out.println(m.group(1));
结果:
yourname
说明:
\[ matches the character [ literally
[A-Z]+ match a single character (case sensitive + between one and unlimited times)
_ matches the character _ literally
1st Capturing group (.+) matches any character (except newline)
\] matches the character ] literally
String player = "[PLAYER_yourname]";
Pattern PLAYER_PATTERN = Pattern.compile("^\\[PLAYER_(.*?)]$");
Matcher matcher = PLAYER_PATTERN.matcher(player);
if (matcher.matches()) {
System.out.println( matcher.group(1) );
}
// prints yourname
请查看演示
public static void main(String[] args) throws InterruptedException {
String s = "[PLAYER_yourname]";
System.out.println(s.split("[_\\]]")[1]);
}
尝试:
Pattern pattern = Pattern.compile(".*?_([^\\]]+)");
Matcher m = pattern.matcher("[PLAYER_yourname]");
if (m.matches()) {
String name = m.group(1);
// name = "yourname"
}