-1

我正在尝试提取已标记的字符串的特殊部分。

String input = "$nick=someone$$message=something$";

现在我想将此字符串拆分为 2 个较小的字符串。

String nick = "someone";
String message = "something";

我知道,我可以使用正则表达式和String.replaceFirst()方法以某种方式做到这一点。但我真的不明白它是如何工作的。

4

3 回答 3

2

您可以使用 JavaPattern类将您的输入与正则表达式(字符串格式)显式匹配:"\\$nick=(.+?)\\$\\$message=(.+?)\\$".

public static void main(String[] args) {
    String input = "$nick=someone$$message=something$";
    String nick = null;
    String message = null;

    java.util.regex.Pattern p = java.util.regex.Pattern.compile("\\$nick=(.+?)\\$\\$message=(.+?)\\$");
    java.util.regex.Matcher m = p.matcher(input);
    if (m.find()) {
        nick = m.group(1);
        message = m.group(2);
    }

    System.out.println("Nick: "+nick);
    System.out.println("Message: "+message);
}

输出:

Nick: someone
Message: something

编辑:

我从您的评论中看到该字符串具有固定格式。在这种情况下,String#indexOf()withString#substring()可以用于更简单的方法:

public static void main(String[] args) {
    String input = "$nick=someone$$message=something$";
    String nick = input.substring(input.indexOf("$nick=")+"$nick=".length(), input.indexOf("$$message="));
    String message = input.substring(input.indexOf("$$message=")+"$$message=".length(),input.length()-1);

    System.out.println("Nick: "+nick);
    System.out.println("Message: "+message);
}
于 2013-06-28T22:53:31.633 回答
1

这将String在您的输入中找到由“=”之前和“$”之后分隔的所有 s String

String input = "$nick=someone$$message=something$";
Pattern pattern = Pattern.compile("=(.+?)\\$");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}

输出:

someone
something
于 2013-06-28T22:53:07.013 回答
1

运行此代码以查看如何从输入字符串中提取数据:

    String input = "$nick=someone$$message=something$";
    Pattern pattern = Pattern.compile("\\$([^=]+)=([^\\$]+)\\$");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        String key = matcher.group(1);
        String value = matcher.group(2);
        System.out.println(key + " = " + value);
    }
于 2013-06-28T22:53:29.800 回答