我有一个像
这样的字符串`hello@{name},how are you today, location: @{location}, time: @{time}`
我想找到所有令牌以“@ {”开头并以“}”结尾。即我的输出将是以下令牌的列表:@ {name},@ {location},@ {time}。或者只是姓名,地点,时间。
答案 0 :(得分:1)
您可以尝试使用带有@\{(.*?)\}
模式的正则表达式匹配器:
String input = "hello@{name},how are you today, location: @{location}, time: @{time}";
String pattern = "@\\{(.*?)\\}";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find()) {
System.out.println("match: " + m.group(1) );
}
<强>输出:强>
match: name
match: location
match: time
在这里演示:
答案 1 :(得分:1)
如果您只想查找结果,使用正则表达式可能是最快速,最简单的方法。 java代码可能是这样的:
String str="hello@{name},how are you today, location: @{location}, time: @{time}";
Pattern pattern = Pattern.compile( "@\\{(.*?)\\}");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1) );
}
或者您想以自己的方式解决问题,您也可以编写一些简单的for循环代码来解决问题。通过编写自己的代码来开始学习程序是一件好事,这里是一个例如:
String str="hello@{name},how are you today, location: @{location}, time: @{time}";
String tempStr="";
boolean inBracket=false;
for (int i=0;i<str.length();i++){
if(!inBracket) {
if (i<str.length()-2&&str.charAt(i) == '@'&&str.charAt(i+1) == '{') {
inBracket=true;
i++;
}
}else{
if(str.charAt(i)=='}'){
System.out.println(tempStr);
tempStr="";
inBracket=false;
}else{
tempStr+=str.charAt(i);
}
}
}
<强>输出:强>
name
location
time
答案 2 :(得分:0)
您可以使用@\{([^\}]*)\}
表达式来查找令牌
组(0)将返回带有@{...}
的标记,组(1)将仅返回大括号中的值
答案 3 :(得分:0)
这很简单:
@\{(.+?)\}
@
匹配@
字符\{
与{
\}
与}
.
匹配所有内容+
表示至少匹配.
一次,最多无限次?
让+
懒惰,尝试尽可能少,因此匹配不会超过}
。试试here。
你只需要得到每场比赛的第1组!
Matcher matcher = Pattern.compile("@\\{(.+?)\\}").matcher("hello@{name},how are you today, location: @{location}, time: @{time}");
while (matcher.find()) {
System.out.println(matcher.group(1));
}
更快但不太直观(IMO)的方法是将.+?
部分替换为[^}]+
,这意味着&#34;匹配所有不是}
的内容尽可能多次&#34;。
答案 4 :(得分:0)
你必须:
Pattern
来定义匹配的模式Matcher
像这样的东西(动态编写的代码,未经检查):
import java.util.regex.*;
// assume that @{...} may contain only letters
// { and } symbols must be \escaped
Pattern p = Pattern.compile("@\\{([a-zA-Z]+)\\}");
Matcher m = p.matcher("hello@{name},...");
List<String> matches = new ArrayList<String>();
while (m.find()) {
String x = m.group(1); // returns "name" from "@{name}"
// use group(0) to get the whole "@{name}"
matches.add(x);
}