I have a string of some random length (not specified as requirement).
Example:
dev.ca.ind.clientaddress-completed-events.dom.0.ind-isl-clientaddress-completed.dlq
Here, I have to skip three strings, i.e. dev.ca.ind. (I want what is after these strings and before this) .dom, i.e. clientaddress-completed-events (I want to fetch this string from that whole string)
Second example:
dev.ca.ind.insurance.client.insurance.dom.0
I want to fetch insurance.client.insurance after ind and before dom and also this ind can also be gb,grs,all,ind. And dom can also be raw,cdc.
How do I do this? I am unable to get idea on how to do this.
I have tried splitting these string with "." but pattern is different for some string as shown in example and this is creating some bugs, so I thought of this way, but wasn't able to implement.
String[] splitName = topics.get(PROJECT i).get(TOPIC_NAME).split("\\.");
but it was not good as I have to assign substrings using hardcoded index values, e.g. ss.set(splitName[2] splitName[3]).
Some more examples:
dev.ca.xfunc.cxo.rawleads.dom.0 - get "cxo.rawleads"
dev.ca.epm.ceapm.zab.dom.0 - get "ceapm.zab"
dev.ca.ind.cx.talas.cdc.0 - get "cx.talas"
dev.ca.cif.source-system-client.dom.0 -get "source-system-client"
dev.ca.gb.claim.providers.int.0 -get "claim.providers"
CodePudding user response:
You'll have to test all cases of prefixes and suffixes:
private static String removePrefix(String s) {
return Stream.of("gb", "grs", "all", "ind")
.map(suffix -> "dev.ca." suffix)
.filter(s::startsWith)
.findFirst()
.map(p -> s.substring(p.length() 1))
.orElseThrow(() -> new IllegalStateException("Invalid String"));
}
private static String removeSuffix(String s) {
return Stream.of(".dom", ".raw", ".cdc")
.filter(s::contains)
.findFirst()
.map(p -> s.substring(0, s.indexOf(p)))
.orElseThrow(() -> new IllegalStateException("Invalid String"));
}
and do
removeSuffix(removePrefix(s))
CodePudding user response:
If it were me, I would use the split function that returns an array of elements like so:
String target = "dev.ca.ind.clientaddress-completed-events.dom.0.ind-isl-clientaddress-completed.dlq"
String keyTokens = target.split(".")
That will give you a keyTokens array of items like so: "dev" "ca" "ind" "clientaddress-completed-events" "dom" "0" "ind-isl-clientaddress-completed" "dlq"
Then walk the array looking for the first String where "isInteger" returns true.
