Java查找字符串中间字符串

时间:2015-06-29 15:14:33

标签: java regex string substring

我很困惑。我使用这种格式来读取字符串中的播放器名称,如下所示:

"[PLAYER_yourname]"

我已经尝试了几个小时,并且无法弄清楚如何只阅读' _'之后的部分。在']'之前到那里来。

我可以帮忙吗?我玩子字符串,分裂,一些正则表达式,没有运气。谢谢! :)

顺便说一句:这个问题有所不同,如果我分开_我不知道如何停在第二个支架上,因为我有其他的弦线经过第二个支架。谢谢!

6 个答案:

答案 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

enter image description here

答案 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"
}