我正在尝试提取标记为String的特殊部分。
String input = "$nick=someone$$message=something$";
现在我想将此String拆分为2个较小的字符串。
String nick = "someone";
String message = "something";
我知道,我可以使用常规表达式和String.replaceFirst()
方法以某种方式做到这一点。但我真的不明白它是如何运作的。
答案 0 :(得分:2)
您可以使用Java Pattern
类将您的输入与正则表达式(字符串格式)明确匹配:"\\$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()
的String#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);
}
答案 1 :(得分:1)
这会在输入String
之后找到所有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
答案 2 :(得分: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);
}