Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从给定字符串获取描述中的预期输出_Java_Regex_String - Fatal编程技术网

Java 如何从给定字符串获取描述中的预期输出

Java 如何从给定字符串获取描述中的预期输出,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

[得分]:机器人-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

受害者=Ace


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));
        }
    }
}