创建正则表达式来解析文件 – Java
发布时间:2020-12-14 05:48:16 所属栏目:百科 来源:网络整理
导读:我有一个我想用以下格式解析的日志文件: 225:org.powertac.common.Competition::0::new::game-0287:org.powertac.common.Competition::0::withSimulationBaseTime::1255132800000288:org.powertac.common.Competition::0::withTimezoneOffset::-6288:org.po
我有一个我想用以下格式解析的日志文件:
225:org.powertac.common.Competition::0::new::game-0 287:org.powertac.common.Competition::0::withSimulationBaseTime::1255132800000 288:org.powertac.common.Competition::0::withTimezoneOffset::-6 288:org.powertac.common.Competition::0::withLatitude::45 289:org.powertac.common.Competition::0::withBootstrapTimeslotCount::336 289:org.powertac.common.Competition::0::withBootstrapDiscardedTimeslots::24 290:org.powertac.common.Competition::0::withMinimumTimeslotCount::1400 290:org.powertac.common.Competition::0::withExpectedTimeslotCount::1440 291:org.powertac.common.Competition::0::withTimeslotLength::60 291:org.powertac.common.Competition::0::withSimulationRate::720 292:org.powertac.common.Competition::0::withTimeslotsOpen::24 292:org.powertac.common.Competition::0::withDeactivateTimeslotsAhead::1 300:org.powertac.du.DefaultBrokerService$LocalBroker::1::new::default broker 300:org.powertac.du.DefaultBrokerService$LocalBroker::1::setLocal::true 2074:org.powertac.common.RandomSeed::2::init::CompetitionControlService::0::game-setup::5354386935242895562 2157:org.powertac.common.TimeService::null::setCurrentTime::2009-10-10T00:00:00.000Z 2197:org.powertac.common.RandomSeed::3::init::AccountingService::0::interest::-8975848432442556652 2206:org.powertac.common.RandomSeed::4::init::TariffMarket::0::fees::-6239716112490883981 2213:org.powertac.common.msg.BrokerAccept::null::new::1 2214:org.powertac.common.msg.BrokerAccept::null::new::1::null 2216:org.powertac.common.RandomSeed::5::init::org.powertac.du.DefaultBrokerService::0::pricing::8741252857248937781 2226:org.powertac.common.TariffSpecification::6::new::1::CONSUMPTION 2231:org.powertac.common.Rate::7::new 2231:org.powertac.common.Rate::7::withValue::-0.5 2232:org.powertac.common.Rate::7::setTariffId::6 模式如下: <id>:<classname>::<order_of_execution>::<new>::<args> 对于方法调用: <id>:<classname>::<order_of_execution>::<method_name>::<args> 对于内部类: <id>:<classname$innerclass>::<order_of_execution>::<method_name or new>::<args> 对于初始调用: <id>:<classname>::<order_of_execution>::<init>::<args> 我想要一个处理所有情况的正则表达式,我将能够检索每个值,如案例中所示. 2231:org.powertac.common.Rate::7::new 将被解析为“2231”,“org.powertac.common.Rate”,“7”,“new”,args = {}. 解决方法
将
Matcher 与捕获组一起使用:
String s = "225:org.powertac.common.Competition::0::new::game-0"; Pattern p = Pattern.compile("([^:]+):([^:]+)::([d]+)::([^:]+)::(.+)"); Matcher m = p.matcher(s); if (m.find()) { String id = m.group(1); String className = m.group(2); int orderOfExecution = Integer.valueOf(m.group(3)); String methodNameOrNew = m.group(4); String[] arguments = m.group(5).split("::"); } 或者更简单的方法,使用 Scanner scanner = new Scanner(s); scanner.useDelimiter("::?"); int id = scanner.nextInt(); String className = scanner.next(); int orderOfExecution = scanner.nextInt(); String methodNameOrNew = scanner.next(); scanner.useDelimiter("$").skip("::"); String[] arguments = scanner.next().split("::"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |