Java在字符之间查找子字符串
Posted
技术标签:
【中文标题】Java在字符之间查找子字符串【英文标题】:Java Find Substring Inbetween Characters 【发布时间】:2015-09-16 03:10:42 【问题描述】:我很困。我使用这种格式读取字符串中的玩家姓名,如下所示:
"[PLAYER_yourname]"
我已经尝试了几个小时,但无法弄清楚如何仅读取 '_' 之后和 ']' 之前的部分来获得名称。
我可以帮忙吗?我玩弄子字符串,拆分,一些正则表达式,但没有运气。谢谢! :)
顺便说一句:这个问题是不同的,如果我用 _ 分割,我不知道如何在第二个括号处停下来,因为我在第二个括号后面还有其他字符串行。谢谢!
【问题讨论】:
使用拆分方法 string.split("-") 你能表现出你的努力吗? 你可以使用 index of 然后在 n - 1 之后解析 @SaketMittal 这不是他想要的。 确切的输入是什么? 【参考方案1】:此解决方案使用 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
【讨论】:
是的,它来自regex101。它没有 Java 正则表达式风格,但它仍然是一个有用的沙箱。【参考方案2】:使用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】:您可以使用子字符串。 int x = str.indexOf('_')
为您提供找到“_”的字符,int y = str.lastIndexOF(']')
为您提供找到“]”的字符。然后你可以做str.substring(x + 1, y)
,这会给你从符号之后到单词结尾的字符串,不包括右括号。
【讨论】:
【参考方案4】:试试:
Pattern pattern = Pattern.compile(".*?_([^\\]]+)");
Matcher m = pattern.matcher("[PLAYER_yourname]");
if (m.matches())
String name = m.group(1);
// name = "yourname"
【讨论】:
【参考方案5】:你可以这样做:
String s = "[PLAYER_yourname]";
String name = s.substring(s.indexOf("_") + 1, s.lastIndexOf("]"));
【讨论】:
谢谢!我没想过使用它,因为我不知道如何使用 .indexOf 或它的用途。我很感激! 如果这个答案解决了你的问题,那么你应该把它作为正确的答案。 请记住,如果用户句柄/播放器名称包含“]”,这将不起作用,您可以使用 str.length - 1 来解决此问题。 Zachary 在此答案之前也回答了这个问题,并且完全相同... @BrandonLing 或使用lastIndexOf
【参考方案6】:
你可以这样做 -
public static void main(String[] args) throws InterruptedException
String s = "[PLAYER_yourname]";
System.out.println(s.split("[_\\]]")[1]);
输出:你的名字
【讨论】:
以上是关于Java在字符之间查找子字符串的主要内容,如果未能解决你的问题,请参考以下文章