How to step reader.readLine() in two for cycles ? - java
I am reading data from a txt file. I want to create new objects from every ten lines and "." indicates that the current object doesn't have any more data lines (I work with two types of object("Nemfuggetlen" and "fuggetlen"), "fuggetlen" has 9 and "Nemfuggetlen" has 7 lines, "." separates their data lines).
The problem is: when I read two "Nemfuggetlen" objects in a row, it works fine, but if I read "fuggetlen" after "Nemfuggetlen" it makes "-------" to the next object first data lines, when it shouldn't. For "Nemfuggetlen" object it should fill the last 3 lines of "adatok" string array with "-------" and step to the next object.
int sorokszama = 0;
input.mark(300);
while((s = input.readLine()) !=null){
sorokszama++;
System.out.println("Sorok szama : " + sorokszama);
input.reset();
for(int h = 0; h < sorokszama/10; h++){
for(int i = 0;(s = input.readLine()) !=null; i++) {
if(i < 10){
if(!(".".equals(s))) {
adatok[i] = s;
System.out.println(adatok[i]);
}
else {
adatok[i] = "-------";
System.out.println(adatok[i]);
break;
}
}
}
if("Ferfi".equals(adatok[2])){
nem = true;
}
else {
nem = false;
}
if("Van".equals(adatok[4])){
tamogato = true;
}
else{
tamogato = false;
}
if("-------".equals(adatok[7])){ //A kepviselo nem fuggetlen
k = new Nemfuggetlen(adatok[0], Integer.parseInt(adatok[1]), nem, adatok[4], new Kerulet (Integer.parseInt(adatok[5])), adatok[6]);
}
if("-------".equals(adatok[9])){ // A kepviselo fuggetlen
k = new Fuggetlen(adatok[0], Integer.parseInt(adatok[1]), nem, adatok[4], new Kerulet (Integer.parseInt(adatok[5])),tamogato, adatok[7], Integer.parseInt(adatok[8]));
}
kepviselok.add(k);
//System.out.println(kepviselok.get(0));
}
System.out.println("Kepviselok szama : " + sorokszama/10);
for(int i = 0; i < kepviselok.size(); i++) {
System.out.println((i+1) + ". tag : " + kepviselok.get(i));
}
input.close();
Related
How to write into csv sheet with below mentioned specific format
We need to get below format Redemption Reference Code|Status|Delivery company|Shipper Tracking Number|Comments 2006995040|Shipped|USPS|ABCD12345|Order SHIPPED 2006995042|Cancelled|||INVALID Address 2006995048|Ordered|USPS|ABCD12345|Order SHIPPED I am using below code private void accumulateOrdersFromPlacement(){ int count = 0; for (int i = 0; i < orderIds.size(); i++) { if (count == 0) { outPutLineData.add(orderIds.get(i)); outPutLineData.add("Cancelled"); outPutLineData.add(""); outPutLineData.add(" "); outPutLineData.add(" "); cancelledStatusLineItems.add(orderIds.get(i)); count++; } else if (count == 1) { outPutLineData.add(orderIds.get(i)); outPutLineData.add("Shipped"); if (outPutLineData.contains("Shipped")) { outPutLineData.add("USPS"); outPutLineData.add("order SHIPPED"); outPutLineData.add(""); } shippedStatusLineItems.add(orderIds.get(i)); count++; } else if (count == 2) { outPutLineData.add(orderIds.get(i)); outPutLineData.add("No Longer Available"); outPutLineData.add(""); outPutLineData.add(" "); outPutLineData.add(" "); count++; nlaStatusLineItems.add(orderIds.get(i)); } else if (count == 3) { outPutLineData.add(orderIds.get(i)); outPutLineData.add("Ordered"); outPutLineData.add(""); outPutLineData.add(" "); outPutLineData.add(" "); orderedStatusLineItems.add(orderIds.get(i)); count = 0; } } I am using below code for file creation. This is the detailed coding . This has more readability to understand code.Here i got confused about the code.We are taking order id count andbased on that this code is working. private File createFile(final File directory) { FileWriter fw = null; File tempFile = null; try { directory.mkdir(); tempFile = new File(".//FidelityFulfillment//" + generateFileName(countyThreeLetterCode, "FidelityFulfillment", ".csv", date)); logReport(GenericConstants.NEW_LINE + "Fulfillment file creating:", tempFile.getName()); fw = new FileWriter(tempFile, true); try (BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile, true))) { writer.write(generateHeaderLine()); writer.newLine(); for (int y = 1; y < outPutLineData.size(); y++) { if (y % 5 < 4) { writer.write(outPutLineData.get(y-1) + fieldSeperator); logReport(outPutLineData.get(y - 1) + fieldSeperator); } else { writer.write(outPutLineData.get(y-1)); logReport(outPutLineData.get(y)); } if (y % 5 == 0) { writer.newLine(); logReport("newline"); } } writer.close(); } catch (final IOException e) { e.printStackTrace(); final String err = "Unable to write file due to : " + e; logReport(GenericConstants.NEW_LINE + "Unable to create temp local File"); } finally { fw.close(); } }catch (Exception e){ e.printStackTrace(); } return tempFile; } Getting response as Redemption Reference Code|Status|Delivery company|ShipperTrackingNumber|Comments 2006964032|Cancelled|| | newline 2006964034|Shipped|USPS|| newline 2006964036|No Longer Available|| Last line one pipline is getting missing
First, you loop in a strange way : for (int y = 1; y < outPutLineData.size(); y++) { In general, we start at 0. But you tried to correct that with the condition : if (y % 5 < 4) { //System.out.print("size:"+y); writer.write(outPutLineData.get(y-1) + fieldSeperator); logReport(outPutLineData.get(y - 1) + fieldSeperator); } else { //System.out.print("size noseperator:"+y); writer.write(outPutLineData.get(y-1)); logReport(outPutLineData.get(y)); } Instead, simply use an iterator to read the values, then on read the correct amount of values : Iterator<String> it = outPutLineData.iterator(); while(it.hasNext()){ for (int j = 0; j < columnCount; ++j) { writer.write(it.next()); if( j < columnCount - 1) writer.write(fieldSeperator); } writer.newLine(); } Example with a StringBuilder to print in console : int columnCount = 2; String fieldSeperator = "|"; List<String> list = Arrays.asList("foo", "1", "bar", "2"); Iterator<String> it = list.iterator(); //Safe guard ! if(list.size() % columnCount != 0) throw new RuntimeException("The list does have the correct amount of data"); while(it.hasNext()){ for (int j = 0; j < columnCount; ++j) { sb.append( it.next() ); if( j < columnCount - 1) sb.append(fieldSeperator ); } System.out.println(sb.toString()); sb.setLength(0); } foo|1 bar|2 Use a POJO You are using a List<String> to hold the values, you need to know how many column you need to read to get the value. Instead, use a POJO : public class Redemption{ String redemptionReference; String code; String status; String deliveryCompany; String shipperTrackingNumber; String comments; } And create the instance in your first loop : List<Redemption> list... That way, you just need to iterate each instance to build your row : for(Redemption r: list){ writer.write(r.getRedemptionReference() + fieldSeperator); ... writer.write(r.getComments()); writer.newLine(); } Of course, you need to use getter and setter but this is just to show what you should do. CSV API Big warning, writing your own CSV writer is dangerous. If you have a comment like "This is a | character". You will end up with a line like : 2006995040|Shipped|USPS|This is a | character|Order SHIPPED That one column to many... because you should have 2006995040|Shipped|USPS|"This is a | character"|Order SHIPPED But you are not checking that case, and this is only one case. Using a CSV API is safer and simpler. See Any good library to read and write csv files?
HashMap key that is made up of multiple tokens and has non-null value mapping returns null
I am creating a currency exchange application from csv data and have hit a road block. I am storing the main currency exchange rate table in a LinkedHashMap of the following type: LinkedHashMap[String,LinkedHashMap[String,Double]] It will store the data as [Country, [Year,Rate]]. When I print to the console to confirm that the Map is being populated properly, I receive confirmation of a full KeySet and proper value mappings. Additionally, the application runs smoothly for any country names consisting of only one token. However, countries with more than one token in their names return null even though the map is populated with that key and its correct corresponding value. For example, printing getExchangeRates() will return all K-V pairs including the following: Australia={1960=0.8929, 1961=0.8929, 1962=0.8929, 1963=0.8929, 1964=0.8929, 1965=0.8929...}, Czech Republic={1990=21.145, 1991=27.92, 1992=28.37, 1993=29.153, 1994=28.785, 1995=26.541...}, New Zealand={1960=0.7143, 1961=0.7155, 1962=0.7192, 1963=0.7192, 1964=0.7192, 1965=0.7192...} Printing getExchangeRates().get("Australia") will return the LinkedHashMap of years and rates; however, printing getExchangeRates().get("Czech Republic") or getExchangeRates().get("New Zealand") will return null. Does anyone know why this would be happening? I am befuddled. Code and csv snippet included for reference, but as I said, the HashMap appears to be populating correctly. ,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008 Australia,0.8929,0.8929,0.8929,0.8929,0.8929,0.8929,0.8929,0.8929,0.8929,0.8929,0.8929,0.8827,0.8387,0.7041,0.6967,0.7639,0.8183,0.9018,0.8737,0.8946,0.8782,0.8702,0.9859,1.11,1.1395,1.4319,1.496,1.4282,1.2799,1.2646,1.2811,1.2838,1.3617,1.4706,1.3678,1.349,1.2779,1.3474,1.5918,1.55,1.7248,1.9334,1.8406,1.5419,1.3598,1.3095,1.328,1.1951,1.1922 Austria,1.88949,1.88949,1.88949,1.88949,1.88949,1.88949,1.88949,1.88949,1.88949,1.88949,1.88949,1.81394,1.67985,1.42293,1.35844,1.26573,1.30373,1.20106,1.05533,0.97145,0.94024,1.15745,1.23975,1.30544,1.45412,1.50356,1.1095,0.91877,0.89734,0.96151,0.82628,0.84852,0.79862,0.84534,0.83005,0.73265,0.76936,0.88691,0.89962,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Belgium,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.21145,1.09109,0.9662,0.96558,0.91173,0.957,0.88852,0.78067,0.72679,0.72488,0.92041,1.13264,1.26752,1.43243,1.47194,1.10739,0.92549,0.91146,0.9768,0.82841,0.84651,0.79697,0.85762,0.82936,0.73079,0.76752,0.88681,0.89982,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Canada,0.9698,1.0131,1.0701,1.0811,1.0811,1.0811,1.0811,1.0811,1.0811,1.0811,1.0477,1.0098,0.9899,1.0001,0.978,1.0172,0.986,1.0635,1.1407,1.1714,1.1692,1.1989,1.2337,1.2324,1.2951,1.3655,1.3895,1.326,1.2307,1.184,1.1668,1.1457,1.2087,1.2901,1.3656,1.3724,1.3635,1.3846,1.4835,1.4857,1.4851,1.5488,1.5693,1.4011,1.301,1.2118,1.1344,1.0741,1.067 Czech Republic,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,21.145,27.92,28.37,29.153,28.785,26.541,27.145,31.698,32.281,34.569,38.598,38.035,32.739,28.209,25.7,23.957,22.596,20.294,17.072 Denmark,6.9071,6.9071,6.9071,6.9071,6.9071,6.9071,6.9071,6.9565,7.5,7.5,7.5,7.4169,6.9493,6.0495,6.0949,5.7462,6.045,6.0032,5.5146,5.261,5.6359,7.1234,8.3324,9.145,10.3566,10.5964,8.091,6.8403,6.7315,7.3102,6.1886,6.3965,6.0361,6.4839,6.3606,5.6024,5.7987,6.6045,6.7008,6.9762,8.0831,8.3228,7.8947,6.5877,5.9911,5.9969,5.9468,5.4437,5.0981 Finland,0.5382,0.5382,0.5382,0.5382,0.5382,0.5382,0.5382,0.58025,0.70638,0.70638,0.70638,0.70375,0.69736,0.64267,0.6347,0.61871,0.64995,0.6777,0.69249,0.65515,0.62735,0.72577,0.81074,0.93682,1.01081,1.04241,0.85263,0.73928,0.7035,0.72173,0.64307,0.68015,0.75339,0.96074,0.87853,0.73442,0.77258,0.87314,0.89881,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 France,0.75266,0.75266,0.75266,0.75266,0.75266,0.75266,0.75266,0.75266,0.75266,0.79185,0.84673,0.84496,0.769,0.67959,0.7339,0.65343,0.72855,0.74907,0.68802,0.64858,0.64419,0.8285,1.00191,1.16186,1.33227,1.36978,1.05588,0.91633,0.90812,0.97264,0.83013,0.86014,0.80704,0.86335,0.8464,0.76095,0.77986,0.8898,0.89938,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Germany,2.14743,2.06221,2.04517,2.04517,2.04517,2.04517,2.04517,2.04517,2.04517,2.01619,1.87133,1.78481,1.63033,1.36648,1.3231,1.25793,1.28743,1.18731,1.027,0.93714,0.92936,1.15552,1.2407,1.30546,1.45511,1.50523,1.11026,0.91899,0.89795,0.96125,0.82611,0.84851,0.79846,0.84533,0.82972,0.73275,0.76938,0.88661,0.8997,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Greece,0.08804,0.08804,0.08804,0.08804,0.08804,0.08804,0.08804,0.08804,0.08804,0.08804,0.08804,0.08804,0.08804,0.08694,0.08804,0.09406,0.10717,0.10811,0.10784,0.1087,0.12507,0.16261,0.19605,0.25844,0.33079,0.40534,0.4108,0.39745,0.41632,0.47665,0.46519,0.5349,0.55942,0.67278,0.71197,0.67986,0.70642,0.80134,0.86729,0.89698,1.07234,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Hungary,..,..,..,..,..,..,..,..,60,60,60,59.82,55.26,48.97,46.75,43.97,41.58,40.96,37.91,35.58,32.53,34.31,36.63,42.67,48.04,50.12,45.83,46.97,50.41,59.07,63.21,74.74,78.99,91.93,105.16,125.68,152.65,186.79,214.4,237.15,282.18,286.49,257.89,224.31,202.75,199.58,210.39,183.63,172.11 Iceland,0.344,0.401,0.43,0.43,0.43,0.43,0.43,0.442,0.622,0.88,0.88,0.88,0.883,0.901,1,1.537,1.822,1.989,2.711,3.526,4.798,7.224,12.352,24.843,31.694,41.508,41.104,38.677,43.014,57.042,58.284,58.996,57.546,67.603,69.944,64.692,66.5,70.904,70.958,72.335,78.616,97.425,91.662,76.709,70.192,62.982,70.18,64.055,87.948 Ireland,0.45347,0.45347,0.45347,0.45347,0.45347,0.45347,0.45347,0.45977,0.52906,0.52906,0.52906,0.52176,0.50839,0.51827,0.54313,0.57397,0.70662,0.7279,0.66217,0.62038,0.61792,0.78889,0.89461,1.02173,1.1714,1.20068,0.94358,0.85443,0.83354,0.89585,0.76767,0.78888,0.74625,0.85993,0.84898,0.79198,0.79362,0.83757,0.8917,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Italy,0.32226,0.32279,0.32279,0.32279,0.32279,0.32279,0.32279,0.32279,0.32279,0.32279,0.32279,0.32017,0.30121,0.30109,0.33587,0.33717,0.42987,0.45572,0.4383,0.4291,0.44232,0.58709,0.69851,0.78442,0.90739,0.98614,0.76994,0.66936,0.67223,0.70863,0.61877,0.64072,0.63649,0.81273,0.83276,0.84127,0.79687,0.87958,0.89668,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Japan,360,360,360,360,360,360,360,360,360,360,360,349.33,303.17,271.7,292.08,296.79,296.55,268.51,210.44,219.14,226.74,220.54,249.08,237.51,237.52,238.54,168.52,144.64,128.15,137.96,144.79,134.71,126.65,111.2,102.21,94.06,108.78,120.99,130.91,113.91,107.77,121.53,125.39,115.93,108.19,110.22,116.3,117.75,103.36 Korea,..,..,..,..,..,..,271.3,270.5,276.7,288.2,310.6,347.2,392.9,398.3,404.5,484,484,484,484,484,607.4,681,731.1,775.8,806,870,881.5,822.6,731.5,671.5,707.8,733.4,780.7,802.7,803.4,771.3,804.5,951.3,1401.4,1188.8,1131,1291,1251.1,1191.6,1145.3,1024.1,954.8,929.3,1102.1 Luxembourg,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.23947,1.21145,1.09109,0.9662,0.96558,0.91173,0.957,0.88852,0.78067,0.72679,0.72488,0.92041,1.13264,1.26752,1.43243,1.47194,1.10739,0.92549,0.91146,0.9768,0.82841,0.84651,0.79697,0.85762,0.82936,0.73079,0.76752,0.88681,0.89982,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Mexico,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.015,0.023,0.023,0.023,0.023,0.025,0.056,0.12,0.168,0.257,0.612,1.378,2.273,2.462,2.813,3.018,3.095,3.116,3.375,6.419,7.599,7.918,9.136,9.56,9.456,9.342,9.656,10.789,11.286,10.898,10.899,10.928,11.13 Netherlands,1.72436,1.6563,1.64268,1.64268,1.64268,1.64268,1.64268,1.64268,1.64268,1.64268,1.64268,1.58933,1.45641,1.26857,1.21993,1.14761,1.19977,1.11369,0.98179,0.91028,0.90217,1.13227,1.21169,1.29515,1.45604,1.50719,1.11177,0.91922,0.89693,0.96235,0.82631,0.84842,0.79796,0.84281,0.82588,0.72863,0.76503,0.88545,0.90018,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 New Zealand,0.7143,0.7155,0.7192,0.7192,0.7192,0.7192,0.7192,0.7337,0.8929,0.8929,0.8929,0.8806,0.8368,0.7368,0.7154,0.8323,1.0049,1.0303,0.9644,0.9785,1.0267,1.1528,1.3326,1.4968,1.764,2.0234,1.9132,1.6946,1.5264,1.6722,1.6762,1.7335,1.8618,1.8505,1.6865,1.5239,1.4549,1.5124,1.8683,1.8896,2.2012,2.3788,2.1622,1.7221,1.5087,1.4203,1.5421,1.3607,1.4227 Norway,7.1429,7.1429,7.1429,7.1429,7.1429,7.1429,7.1429,7.1429,7.1429,7.1429,7.1429,7.0418,6.5883,5.7658,5.5397,5.2269,5.4565,5.3235,5.2423,5.0641,4.9392,5.7395,6.454,7.2964,8.1615,8.5972,7.3947,6.7375,6.517,6.9045,6.2597,6.4829,6.2145,7.0941,7.0576,6.3352,6.4498,7.0734,7.5451,7.7992,8.8018,8.9917,7.9838,7.0802,6.7408,6.4425,6.4133,5.8617,5.64 Poland,..,..,..,..,..,..,0.0004,0.0004,0.0004,0.0004,0.0004,0.0004,0.0004,0.0003,0.0003,0.0003,0.0003,0.0003,..,0.004,0.0044,0.0051,0.0085,0.0092,0.0113,0.0147,0.0175,0.0265,0.0431,0.1439,0.95,1.0576,1.3626,1.8115,2.2723,2.425,2.6961,3.2793,3.4754,3.9671,4.3461,4.0939,4.08,3.8891,3.6576,3.2355,3.1032,2.768,2.4092 Portugal,0.1434,0.1434,0.1434,0.1434,0.1434,0.1434,0.1434,0.1434,0.1434,0.1434,0.1434,0.14122,0.13494,0.12228,0.12673,0.12746,0.15078,0.19092,0.21916,0.24403,0.24971,0.30699,0.39641,0.55257,0.73019,0.84993,0.74614,0.70272,0.71804,0.7854,0.71106,0.72067,0.67337,0.80207,0.82797,0.75371,0.76937,0.87445,0.89835,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Slovak Republic,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,1.0214,1.0637,0.9863,1.0175,1.1159,1.1695,1.373,1.5281,1.6051,1.5046,1.2206,1.0707,1.0296,0.9858,0.8197,0.7091 Spain,0.36061,0.36061,0.36061,0.36061,0.36061,0.36061,0.36061,0.37063,0.42071,0.42071,0.42071,0.41752,0.38628,0.35015,0.3467,0.34502,0.4021,0.45654,0.46078,0.40343,0.43094,0.55487,0.66027,0.86203,0.96619,1.02199,0.84171,0.74212,0.7001,0.71147,0.61264,0.62452,0.61531,0.76485,0.8051,0.7494,0.76125,0.87997,0.89788,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Sweden,5.1732,5.1732,5.1732,5.1732,5.1732,5.1732,5.1732,5.1732,5.1732,5.1732,5.1732,5.1168,4.7624,4.3673,4.4394,4.1522,4.3559,4.4816,4.5185,4.2871,4.2296,5.0634,6.2826,7.6671,8.2718,8.6039,7.1236,6.3404,6.1272,6.4469,5.9188,6.0475,5.8238,7.7834,7.716,7.1333,6.706,7.6349,7.9499,8.2624,9.1622,10.3291,9.7371,8.0863,7.3489,7.4731,7.3783,6.7588,6.5911 Switzerland,4.373,4.373,4.373,4.373,4.373,4.373,4.373,4.373,4.373,4.373,4.373,4.1342,3.8193,3.1648,2.9793,2.5813,2.4996,2.4035,1.788,1.6627,1.6757,1.9642,2.0303,2.0991,2.3497,2.4571,1.7989,1.4912,1.4633,1.6359,1.3892,1.434,1.4062,1.4776,1.3677,1.1825,1.236,1.4513,1.4498,1.5022,1.6888,1.6876,1.5586,1.3467,1.2435,1.2452,1.2538,1.2004,1.0831 Turkey,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,0.0001,0.0001,0.0002,0.0002,0.0004,0.0005,0.0007,0.0009,0.0014,0.0021,0.0026,0.0042,0.0069,0.011,0.0296,0.0458,0.0814,0.1519,0.2607,0.4188,0.6252,1.2256,1.5072,1.5009,1.4255,1.3436,1.4285,1.3029,1.3015 United Kingdom,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.35714,0.3621,0.41667,0.41667,0.41667,0.41092,0.40039,0.40817,0.42776,0.45204,0.55651,0.57327,0.52151,0.47218,0.4303,0.49764,0.57245,0.65973,0.75181,0.77925,0.6822,0.61193,0.56217,0.61117,0.56318,0.56702,0.56977,0.66676,0.65343,0.63367,0.64096,0.61084,0.60382,0.61806,0.66093,0.69466,0.66722,0.61247,0.54618,0.55,0.54349,0.49977,0.54397 United States,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Euro area,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,0.76452,0.78756,0.8818,0.89199,0.93863,1.0854,1.11751,1.06255,0.88603,0.80537,0.80412,0.79714,0.73064,0.68268 Brazil,0.0001,0.0001,0.0001,0.0002,0.0005,0.0007,0.0009,0.001,0.0013,0.0016,0.0018,0.002,0.0023,0.0024,0.0026,0.0031,0.0041,0.0055,0.007,0.0104,0.0203,0.0359,0.0693,0.2227,0.7131,2.3925,5.2694,15.137,79.6677,-,-,0.0001,0.0016,0.0322,0.6393,0.9177,1.0051,1.078,1.1605,1.8139,1.8294,2.3496,2.9204,3.0775,2.9251,2.4344,2.1753,1.9471,1.8338 Chile,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,396.77,412.27,419.3,460.29,508.78,539.59,634.94,688.94,691.4,609.53,559.77,530.28,522.46,522.46 China,2.462,2.462,2.462,2.462,2.462,2.462,2.462,2.462,2.462,2.462,2.462,2.462,2.245,1.989,1.961,1.86,1.941,1.858,1.684,1.555,1.498,1.705,1.893,1.976,2.32,2.937,3.453,3.722,3.722,3.765,4.783,5.323,5.515,5.762,8.619,8.351,8.314,8.29,8.279,8.278,8.279,8.277,8.277,8.277,8.277,8.194,7.973,7.608,6.949 Estonia,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,13.223,12.991,11.465,12.038,13.882,14.075,14.678,16.969,17.478,16.612,13.856,12.596,12.584,12.466,11.434,10.694 India,4.77,4.78,4.77,4.78,4.79,4.79,6.3,7.56,7.58,7.59,7.57,7.52,7.59,7.74,8.1,8.38,8.96,8.74,8.19,8.13,7.86,8.66,9.46,10.1,11.36,12.37,12.61,12.96,13.92,16.23,17.5,22.74,25.92,30.49,31.37,32.43,35.43,36.31,41.26,43.06,44.94,47.19,48.61,46.58,45.32,44.1,45.31,41.35,43.51 Indonesia,..,..,..,..,..,..,..,150,296,326,363,392,415,415,415,415,415,415,442,623,627,632,661,909,1026,1111,1283,1644,1686,1770,1843,1950,2030,2087,2161,2249,2342,2909,10014,7855,8422,10261,9311,8577,8939,9705,9159,9141,9699 Israel 1,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,3.0113,3.1917,3.4494,3.8001,4.1397,4.0773,4.2057,4.7378,4.5541,4.482,4.4877,4.4558,4.1081,3.588 Russian Federation,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,0.992,2.191,4.559,5.121,5.785,9.705,24.62,28.129,29.169,31.349,30.692,28.814,28.284,27.191,25.581,24.853 Slovenia,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,..,0.11505,0.3392,0.47255,0.53751,0.49457,0.56486,0.66637,0.69326,0.75851,0.92913,1.01297,1.00254,0.86427,0.80279,0.80414,0.79715,0.73064,0.68268 South Africa,0.713,0.715,0.713,0.715,0.717,0.716,0.717,0.717,0.717,0.718,0.716,0.712,0.773,0.694,0.679,0.74,0.87,0.87,0.87,0.842,0.779,0.878,1.086,1.114,1.475,2.229,2.285,2.036,2.273,2.623,2.587,2.761,2.852,3.268,3.551,3.627,4.299,4.608,5.528,6.109,6.94,8.609,10.541,7.565,6.46,6.359,6.772,7.045,8.261 public static ArrayList<String> getYears() throws IOException { File file = new File("exchangerates.csv"); BufferedReader br = new BufferedReader(new FileReader(file)); ArrayList<String> years = new ArrayList<String>(); String line = br.readLine(); String year = ""; for(int i = 1; i < line.length(); i++) { if(line.charAt(i) != ',' && i != line.length()-1) { year = year + line.charAt(i); } else if(i == line.length()-1) { year = year + line.charAt(i); years.add(year); } else { years.add(year); year = ""; } } br.close(); return years; } public static LinkedHashMap<String,LinkedHashMap<String,Double>> getExchangeRates() throws IOException { File file = new File("exchangerates.csv"); BufferedReader br = new BufferedReader(new FileReader(file)); //burn first line br.readLine(); LinkedHashMap<String,LinkedHashMap<String,Double>> exchangeRatesTable = new LinkedHashMap<String,LinkedHashMap<String,Double>>(); String line = null; while((line = br.readLine()) != null) { String country = ""; int index = 0; while(line.charAt(index) != ',') { country = country + line.charAt(index); index++; } index++; //skip comma LinkedHashMap<String,Double> yearlyRateMap = new LinkedHashMap<String,Double>(); for(String year : getYears()) { String rateString = ""; for(int k = index; k < line.length(); k++) { if(line.charAt(k) != ',' && k != line.length()-1) { rateString = rateString + line.charAt(k); index++; } else if(k == line.length()-1) { rateString = rateString + line.charAt(k); index++; if(!rateString.equals("..")) { Double exchangeRate = new Double(rateString); yearlyRateMap.put(year, exchangeRate); } else { index++; break; } break; } else { if(!rateString.equals("..") && !rateString.equals("-")) { index++; Double exchangeRate = new Double(rateString); yearlyRateMap.put(year, exchangeRate); } else { index++; break; } break; } } } exchangeRatesTable.put(country, yearlyRateMap); } br.close(); return exchangeRatesTable; }
3 line read from txt file
txt file read and 1~3 line is send Mesaage and 3~6 line read message send but 1~3 read after send, next Again 1~3 line read after send... I want 3 line read Repeat from txt file test.txt 1|11221234|c1|c2|c3|c4 2|11221234|c1|c2|c3|c4 3|11221234|c1|c2|c3|c4 4|11221234|c1|c2|c3|c4 5|11221234|c1|c2|c3|c4 6|11221234|c1|c2|c3|c4 7|11221234|c1|c2|c3|c4 8|11221234|c1|c2|c3|c4 9|11221234|c1|c2|c3|c4 9|11221234|c1|c2|c3|c4 10|11221234|c1|c2|c3|c4 11|11221234|c1|c2|c3|c4 12|11221234|c1|c2|c3|c4 13|11221234|c1|c2|c3|c4 while ((s = in.readLine()) != null) { cnt++; Element record = new Element("RECORD"); String[] arr = s.split("│"); if (arr.length == tableInfoMap.size()) { for (int i = 0; i < arr.length; i++) { int j = i + 1; String fieldName = (String) tableInfoMap .get("COLUMN" + j); Element field = new Element(fieldName); field.addContent(new CDATA(arr[i])); record.addContent(field); } } else { throw new ArrayIndexOutOfBoundsException(" "); } rootElement.addContent(record); if (cnt >= 3) { sendMsg(srcTblName, tgtTblName, classPath, className, doc, comm, sndAgency, rcvAgency, cnt); cnt = 0; } } if (cnt > 0) { boolean isSend = sendMsg(srcTblName, tgtTblName, classPath, className, doc, comm, sndAgency, rcvAgency, cnt); in.close(); if (isSend == true) { File f = new File(file); if (f.delete() == true) { logger.info("Send File Success: " + file); logger.debug(f.getPath()); } else { logger.warn("Send File Fail: " + file); logger.debug(f.getPath()); } } }
Unsure what the question is but the | character in the split() requires escaping (the argument to split() is a regular expression and not a plain string): String[] arr = s.split("\\│"); // Match | character only.
How do I get my array out of try/catch block?
I've been kicking this code around for a while and I think I know what the general problem is, I can't figure out how to correct it. I'm getting the following error: C:\Documents and Settings\Joe King\My Documents\418.85A Java\Project5>javac Project5.java Project5.java:408: error: variable boatNames might not have been initialized boatArray1 = new Boat[boatNames.length]; ^ 1 error The problem is my boatNames array is in a try/catch block and I think this is isolating it from the rest of the code. How can I get the boatNames array out of the try/catch block? My code is as follows: class Project5{ public static void main(String[] args){ String[] boatNames; Boat[] boatArray1; Boat[] boatArray2; String result = " "; String name = null; char firstChar; char firstLetter; char secondLetter; int totalRead; int i; int j; int k; int l; int m; Path inPath = Paths.get("C:/Documents and Settings/Joe King/My Documents/418.85A Java/Projects/Input").resolve("Boat Names.txt"); if(!Files.exists(inPath)){ System.out.println(inPath + " does not exist. Terminating the program."); System.exit(1); } try(BufferedReader fileIn = Files.newBufferedReader(inPath, Charset.forName("UTF-16"))){ totalRead = 0; while(fileIn.readLine() != null){ name = fileIn.readLine(); ++totalRead; name = null; } boatNames = new String[totalRead]; for(i = 0 ; i < boatNames.length ; ++i){ name = fileIn.readLine(); boatNames[i] = name; name = null; } }catch(IOException e){ System.err.println("Error writing file: " + inPath); e.printStackTrace(); } Path outPath = Paths.get("C:/Documents and Settings/Joe King/My Documents/418.85A Java/Projects/Output").resolve("Fleet Registry.txt"); try{ Files.createDirectories(outPath.getParent()); }catch(IOException e){ System.err.println("Error creating directory: " + outPath.getParent()); e.printStackTrace(); System.exit(1); } boatArray1 = new Boat[boatNames.length]; if(boatNames.length > 0){ try(BufferedWriter fileOut = Files.newBufferedWriter(outPath, Charset.forName("UTF-16"))){ for(j = 0 ; j < boatNames.length ; j++){ String delimiters = "[. ,]"; int limit = -1; String[]tokens = boatNames[j].split(delimiters, limit); for(k = 0 ; k < tokens.length ; ++k){ firstChar = tokens[k].charAt(0); firstChar = Character.toUpperCase(firstChar); char[] tokenArray = tokens[k].toCharArray(); String text = new String(tokenArray, 1, (tokenArray.length - 1) ); tokens[k] = firstChar + text; result = result + tokens[k] + " "; if(k != tokens.length - 1){ continue; }else{ result = result.trim(); boatNames[k] = result; result = " "; } } firstLetter = boatNames[j].charAt(0); if((firstLetter == 'B') || (firstLetter == 'C') || (firstLetter == 'N')){ boatArray1[j] = new RaceBoat(); }else{ boatArray1[j] = new SailBoat(); } boatArray1[j].christenBoat(boatNames[j]); } System.out.println("\n"); for(l = 0 ; l < boatNames.length ; ++l){ secondLetter = Character.toUpperCase(boatNames[l].charAt(1)); if((secondLetter == 'A') || (secondLetter == 'E')){ if(l > 0){ fileOut.newLine(); } fileOut.write(boatArray1[l].goFast()); }else{ if(l > 0){ fileOut.newLine(); } fileOut.write(boatArray1[l].goSlow()); } fileOut.newLine(); fileOut.write(boatArray1[l].launchBoat()); fileOut.newLine(); fileOut.write(boatArray1[l].whatIsBoatState()); fileOut.newLine(); } boatArray2 = new Boat[3]; boatArray2[0] = new SailBoat(); boatArray2[1] = new RaceBoat("Endurance", true); boatArray2[2] = new RaceBoat(false); for(m = 0 ; m < boatArray2.length ; ++m){ fileOut.newLine(); fileOut.write(boatArray2[m].toString()); fileOut.newLine(); fileOut.write(boatArray2[m].launchBoat()); fileOut.newLine(); fileOut.write(boatArray2[m].whatIsBoatState()); fileOut.newLine(); } fileOut.newLine(); fileOut.write("There are " + Boat.boatCount + " boats in the fleet this morning."); }catch(IOException e){ System.err.println("Error writing outPath: " + outPath); e.printStackTrace(); } }else{ System.out.println("\n\n\nArgh!... you forgot to enter ship names scalawag!" + "\n\n\n\tPlease try again!"); } System.out.println("\nThe Fleet Registry is completed, press ENTER to continue.\n"); try{ System.in.read(); } catch(IOException e){ return; } } } Thank you everyone, I've entered the following: if(boatNames != null){ boatArray1 = new Boat[boatNames.length]; if(boatNames.length > 0){ try(BufferedWriter fileOut = Files.newBufferedWriter(outPath, Charset.forName("UTF-16"))){ for(j = 0 ; j < boatNames.length ; j++){ String delimiters = "[. ,]"; int limit = -1; String[]tokens = boatNames[j].split(delimiters, limit); for(k = 0 ; k < tokens.length ; ++k){ firstChar = tokens[k].charAt(0); firstChar = Character.toUpperCase(firstChar); char[] tokenArray = tokens[k].toCharArray(); String text = new String(tokenArray, 1, (tokenArray.length - 1) ); tokens[k] = firstChar + text; result = result + tokens[k] + " "; if(k != tokens.length - 1){ continue; }else{ result = result.trim(); boatNames[k] = result; result = " "; } } firstLetter = boatNames[j].charAt(0); if((firstLetter == 'B') || (firstLetter == 'C') || (firstLetter == 'N')){ boatArray1[j] = new RaceBoat(); }else{ boatArray1[j] = new SailBoat(); } boatArray1[j].christenBoat(boatNames[j]); } System.out.println("\n"); for(l = 0 ; l < boatNames.length ; ++l){ secondLetter = Character.toUpperCase(boatNames[l].charAt(1)); if((secondLetter == 'A') || (secondLetter == 'E')){ if(l > 0){ fileOut.newLine(); } fileOut.write(boatArray1[l].goFast()); }else{ if(l > 0){ fileOut.newLine(); } fileOut.write(boatArray1[l].goSlow()); } fileOut.newLine(); fileOut.write(boatArray1[l].launchBoat()); fileOut.newLine(); fileOut.write(boatArray1[l].whatIsBoatState()); fileOut.newLine(); } boatArray2 = new Boat[3]; boatArray2[0] = new SailBoat(); boatArray2[1] = new RaceBoat("Endurance", true); boatArray2[2] = new RaceBoat(false); for(m = 0 ; m < boatArray2.length ; ++m){ fileOut.newLine(); fileOut.write(boatArray2[m].toString()); fileOut.newLine(); fileOut.write(boatArray2[m].launchBoat()); fileOut.newLine(); fileOut.write(boatArray2[m].whatIsBoatState()); fileOut.newLine(); } fileOut.newLine(); fileOut.write("There are " + Boat.boatCount + " boats in the fleet this morning."); }catch(IOException e){ System.err.println("Error writing outPath: " + outPath); e.printStackTrace(); } }else{ System.out.println("\n\n\nArgh!... you forgot to enter ship names scalawag!" + "\n\n\n\tPlease try again!"); } System.out.println("\nThe Fleet Registry is completed, press ENTER to continue.\n"); try{ System.in.read(); } catch(IOException e){ return; } } Now I'm getting the following error: C:\Documents and Settings\Joe King\My Documents\418.85A Java\Project5>java Project5 Exception in thread "main" java.lang.NullPointerException at Project5.main(Project5.java:424) This doesn't make sense to me, in order to get to line 424 the boatNames array cannot be null because the length of boatNames was used several times before line 424. What am I missing? Thanks
The variable is out of the try/catch, otherwise the compile error would be different. The problem is that the initialization is inside the try block, so that code after the try can't be sure the variable was initialized. There are two ways to deal with this: Initialize the variable when you declare it. Just using this would be enough: String[] boatNames = null; Move all the code that uses the variable inside the try block. This is often a good strategy, but only if your methods are small. In your case, I wouldn't recommend this, as your method is much too long. Now, if you could break your code up into shorter methods, then limiting the scope of the variable to a single try block would make good sense.
Before the try/catch block, initialize the array like this: String[] boatNames = null;
You have declared your array outside try block String[] boatNames; It will be initialized under first try block boatNames = new String[totalRead]; Issue is here boatArray1 = new Boat[boatNames.length]; Reason, your compiler has no way to know if boatNames initialization will be successful as there might be an exception and initialization will fail. As part of your declaration you can do this: String[] boatNames = null; // This will fix your immediate problem but doing this may lead you to NullPointerException since your File read can fail. To solve this do a null check on your array before you use it. if(boatNames == null){ // I am not going to go further or will take corrective measures here }
The compiler here considers the possibility that an exception might be raised in the try block even before boatNames is initialized hence it gives the compiler error might not have been initialized. The might is important here! The ideal solution here would be to tweak your code structure and put boatArray1 = new Boat[boatNames.length]; in the same try block!
Adding commas to output
This is what it does: 2, 4, 6, 8, 10 I would like for it to be horizontal: 2, 4, 6, 8, 10 try { PrintWriter fout = new PrintWriter(new BufferedWriter(new FileWriter("numbers.dat"))); for(int i = start; i <= 100; i = i + 2) { fout.println(i+","); }
Another attempt for(int i = start; i <= 100; i += 2) System.out.print(i + (i > 98 ? "\n" : ", "));
In the write() method: for(int i = start; i <= 100; i = i + 2) { if (i > start) { fout.print(","); } fout.println(i); } Then when you call output(), it will display as comma separated list. And for screen display while((outputline = fin.readLine()) != null) { System.out.print(outputline + " "); } System.out.println(); Alternatively, skip saving the comma in the file and displaying will be as follows int count = 0; while((outputline = fin.readLine()) != null) { if (count > 0) System.out.print(", "); System.out.print(outputline); count++; } System.out.println();
If you mean to do it on printing to your .dat file: for(int i = start; i <= 100; i = i + 2) { fout.print(i); if(i < 100) { fout.print(", "); } else { fout.println(); } } If it is when printing to the system output after reading your file, try this: try { BufferedReader fin = new BufferedReader(new FileReader("numbers.dat")); String outputline = ""; StringBuilder result = new StringBuilder(); while((outputline = fin.readLine()) != null) { result.append(outputline).append(", "); } int length = result.length(); result.delete(length - 2, length); System.out.println(result); fin.close(); } This uses a StringBuilder to build up your result and then removes the last , when it is done.
Here is a very basic example of what you could do: int max=11; for(int i = 0; i < max; i += 2){ System.out.print(i); if(i < max-2){ System.out.print(", "); } }
fout.println(i + ", "); System.out.println(outputline + ", "); This will give you commas after all the numbers but it looks like you don't need one after the final number. You will have to remove the last comma either by using indexOf or checking for the last iteration of your loop.