我正在尝试提取已标记的字符串的特殊部分。
String input = "$nick=someone$$message=something$";
现在我想将此字符串拆分为 2 个较小的字符串。
String nick = "someone";
String message = "something";
我知道,我可以使用正则表达式和String.replaceFirst()
方法以某种方式做到这一点。但我真的不明白它是如何工作的。
您可以使用 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);
}
这将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
运行此代码以查看如何从输入字符串中提取数据:
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);
}