我很困惑。我使用这种格式来读取字符串中的播放器名称,如下所示:
"[PLAYER_yourname]"
我已经尝试了几个小时,并且无法弄清楚如何只阅读' _'之后的部分。在']'之前到那里来。
我可以帮忙吗?我玩子字符串,分裂,一些正则表达式,没有运气。谢谢! :)
顺便说一句:这个问题有所不同,如果我分开_我不知道如何停在第二个支架上,因为我有其他的弦线经过第二个支架。谢谢!答案 0 :(得分:6)
你可以这样做:
String s = "[PLAYER_yourname]";
String name = s.substring(s.indexOf("_") + 1, s.lastIndexOf("]"));
答案 1 :(得分:4)
您可以使用子字符串。 int x = str.indexOf('_')
为您提供找到'_'的字符,int y = str.lastIndexOF(']')
为您提供找到']'的字符。然后你可以做str.substring(x + 1, y)
,这会给你从符号后面到单词结尾的字符串,不包括结束括号。
答案 2 :(得分:3)
使用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
答案 3 :(得分:2)
此解决方案使用Java正则表达式
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
请参阅DEMO
答案 4 :(得分:1)
你可以这样做 -
public static void main(String[] args) throws InterruptedException {
String s = "[PLAYER_yourname]";
System.out.println(s.split("[_\\]]")[1]);
}
输出:你的名字
答案 5 :(得分:0)
尝试:
Pattern pattern = Pattern.compile(".*?_([^\\]]+)");
Matcher m = pattern.matcher("[PLAYER_yourname]");
if (m.matches()) {
String name = m.group(1);
// name = "yourname"
}