Java 如何从给定字符串获取描述中的预期输出
[得分]:机器人-16从[演员-杀戮][受害者:演员200(演员-当地人-仆从200)][@152133]获得2.0悬赏。 如何格式化上述字符串,以便获得以下输出: 玩家ID=Bot-16 积分=2.0 动作=[Actor Kill] 受害者=Actor200(Actor\u Local\u Minion\u 200) 时间戳=152133 另外,有些行没有受害者标记,如下面的字符串中所示 [得分]:2 Dev 158744780从[Actor-Kill][Ace][@519382]获得20.0悬赏 输出应该是 玩家ID=2 Dev 158744780 点数=20.0 Action=Actor Kill 受害者=AceJava 如何从给定字符串获取描述中的预期输出,java,regex,string,Java,Regex,String,[得分]:机器人-16从[演员-杀戮][受害者:演员200(演员-当地人-仆从200)][@152133]获得2.0悬赏。 如何格式化上述字符串,以便获得以下输出: 玩家ID=Bot-16 积分=2.0 动作=[Actor Kill] 受害者=Actor200(Actor\u Local\u Minion\u 200) 时间戳=152133 另外,有些行没有受害者标记,如下面的字符串中所示 [得分]:2 Dev 158744780从[Actor-Kill][Ace][@519382]获得20.0
Timestamp=519382您可以使用正则表达式来处理此问题 查看您的输入字符串,我得出了以下正则表达式:
\[Scoring\]: (.*) got ([^\s]*) bounty from \[([^\]]*)\] \[(?:Victim: )?([^\]]*)\] \[@([^\]]*)\]
此处演示:
这是Java的演示程序及其输出。我认为这将是你的解决办法
输出:
**First Input**
Player-ID = Bot-16
Points = 2.0
Action = Actor - Kill
Victim = Actor200_(Actor_Local_Minion_200)
Timestamp = 152133
**Second Input**
Player-ID = 2 Dev 158744780
Points = 20.0
Action = Actor - Kill
Victim = Ace
Timestamp = 519382
代码:
如果格式变化不大,可以使用正则表达式提取细节。类似于,
“[得分]:Bot-16从[Actor-Kill][被害人:Actor200(Actor\u Local\u Minion\u 200)][@152133]”获得2.0赏金。匹配(/(\[Scoring\]:)\s(Bot.*)\s(\[Ac.*)\s(\[.\]])\s(\[.*]/)
。这是JS,但在JAVA中也应该类似。这正是我想要的。非常感谢你。我在用regex,但没能得到我想要的。但这太完美了。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo {
public static void main(String[] args) {
System.out.println("**First Input**");
printInfo("[Scoring]: Bot-16 got 2.0 bounty from [Actor - Kill] [Victim: Actor200_(Actor_Local_Minion_200)] [@152133]");
System.out.println("\n**Second Input**");
printInfo("[Scoring]: 2 Dev 158744780 got 20.0 bounty from [Actor - Kill] [Ace] [@519382]");
}
public static void printInfo(String line) {
String pattern = "\\[Scoring\\]: (.*) got ([^\\s]*) bounty from \\[([^\\]]*)\\] \\[(?:Victim: )?([^\\]]*)\\] \\[@([^\\]]*)\\]";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if (m.find()) {
System.out.println("Player-ID = " + m.group(1));
System.out.println("Points = " + m.group(2));
System.out.println("Action = " + m.group(3));
System.out.println("Victim = " + m.group(4));
System.out.println("Timestamp = " + m.group(5));
}
}
}