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在字符之间查找子字符串的主要内容,如果未能解决你的问题,请参考以下文章

C++编程,查找字符串子串并替换。

数组篇在python中如何查找最长字符串子串

字符串子串的查找

如何在Java中将字符串子串到第二个点(。)?

Java在字符之间查找子字符串

华为OD机试真题Java实现判断字符串子序列真题+解题思路+代码(2022&2023)