I have executed a program which reads long string and divide the string on basis of specified input. Well I am getting the correct output but would try it to be more efficient and readable. Opinions and tactics are welcomed to make the code more better and fast.
Problem Statement:: Need to split the input string on basis of input parameter.In given input string First parameter length is fixed(e.g.given string Starts with TUEF having fixed length of 94).Other parameter having variable in length(e.g.Given string next input for split is "PN03N01" which is variable in length.Next input parameter is "ID03I" which is also variable in length and it can appear in many times in string like"ID03I01","ID03I02"..)
Solution:: Added all input code in stack and removed the required data against input string and put into map using recursive way
Below is code::
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Stack;
public class TUEFSplitter {
public static void main(String[] args) {
HashMap hm = new HashMap();
String str = "TUEF12111492911 0000BP03251021 100135514576830122016170412PN03N010125NAMEXXXX MIDDLEN LASTNAM0225NAMEXXXX MIDDLEN LASTNAM07082810198108012ID03I010102010210AFFPT8319BID03I0201020602126165040199789001YPT03T010108425188000302039001YPT03T02011022425188000302029001YPT03T03010842518800030203PT03T04011099877939000302019001YEM03E01010210020831102016030201SC10CIBILTUSC2010204020210030830122016040500694250220260211270205PA03A010124610 B WING SAGAR TECH0224PLAZA ANDHERI KURLA ROAD0323SAKI NAKA JUNCTION NEAR0422BY SAKI NAKA METRO STN0506MUMBAI06022707064000720802031008280620169001YPA03A020122501-B2 EKTA SAFALE CHS0220OLD AGRA ROAD CASTLE0309NILL NAKA0505THANE0602270706400601080204100824062016PA03A030115SAKINAKA MUMBAI06022707064000700802031008310320169001YPA03A0401362B 501 EKATA SAFALE CHS BH. SAIANAND0206MUMBAI06022707064001640802021008310320169001YTL04T0010213NOT DISCLOSED040210050110808230320160908301020161108301120161205272231305272232827000000000000000000000000000300801112016310801032016IQ04I0010108281220160413NOT DISCLOSED0502050606900000IQ04I0020108231220160413NOT DISCLOSED0502050606400000IQ04I0030108251120160413NOT DISCLOSED050210060550000IQ04I0040108260820160413NOT DISCLOSED050210060550000IQ04I0050108120820160413NOT DISCLOSED0502100606100000IQ04I0060108120720160413NOT DISCLOSED050210060550000IQ04I0070108280620160413NOT DISCLOSED050210060550000IQ04I0080108240620160408RBL BANK05021006041000IQ04I0090108310320160413NOT DISCLOSED050210060550000IQ04I0100108200320160413NOT DISCLOSED05021006041000IQ04I0110108010120160413NOT DISCLOSED050210060515000ES0700016210102**";
hm.put(str.substring(0,4),str.substring(4,94));
//System.out.println("original String length is " +str.length());
Stack st = new Stack();
st.push("ES07");
st.push("DR03D0");
st.push("IQ04I0");
st.push("TL04T0");
st.push("PA03A");
st.push("SC10CIBILTUSC2");
st.push("PI03I");
st.push("EM03E");
st.push("EC03C");
st.push("PT03T");
st.push("ID03I");
spillter(str.substring(94),hm ,st);
System.out.println("Size of HashMap is " +hm.size());
Set set = hm.keySet();
Iterator it =set.iterator();
while (it.hasNext()) {
String key = (String) it.next();
System.out.println("Keyyyy is " +key);
System.out.println("Value is "+hm.get(key));
}
}
static String startPoint = "PN03N01";
static void spillter(String str ,HashMap hm , Stack st)
{
if(str.contains(startPoint)){
int i= 1;
String searchString;
if(st.size()>0)
{
searchString = st.pop().toString();
}
else
{
searchString = startPoint;
}
while(true)
{
String fsearch;
if(searchString.equals("SC10CIBILTUSC2") ||searchString.equals("ES07") )
{
fsearch = searchString;
}
else
{
if(i<=9)
{
fsearch = searchString+"0"+i;
}
else
{
fsearch = searchString+i;
}
}
if(str.contains(fsearch))
{
int end = str.indexOf(fsearch);
if(end == 0)
{
end = str.length();
}
hm.put(startPoint,str.substring(startPoint.length(), end));
str = str.substring(end);
startPoint = fsearch;
i++;
if(fsearch.equals("SC10CIBILTUSC2"))
{
spillter(str,hm,st);
break;
}
}
else
{
if(str.length()>0 && !str.isEmpty())
{
spillter(str,hm,st);
}
break;
}
}
return ;
}
else
{
return ;
}
}
}