<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        北京車和家java開發工程師面試題總結

        來源:懂視網 責編:小采 時間:2020-11-27 21:50:24
        文檔

        北京車和家java開發工程師面試題總結

        北京車和家java開發工程師面試題總結: 版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。 題目描述: 筆試題: CSV 文件處理 給定一個 CSV 文件,其內容的展現規則如下: - 每一行數據包含多個字段,字段間以 [,] 分割。 - 如果字段值不
        推薦度:
        導讀北京車和家java開發工程師面試題總結: 版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。 題目描述: 筆試題: CSV 文件處理 給定一個 CSV 文件,其內容的展現規則如下: - 每一行數據包含多個字段,字段間以 [,] 分割。 - 如果字段值不
        版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

        題目描述:

        筆試題: CSV 文件處理

        給定一個 CSV 文件,其內容的展現規則如下:

        ?

        - 每一行數據包含多個字段,字段間以 [,] 分割。

        - 如果字段值不含有 [,] 和 ["] ,直接解析輸出。

        - 如果字段值內部含有逗號 [,],在在字段值兩邊加上雙引號 ["] 將字段值括起來。

        - 如果字段值內部含有雙引號 ["],則字段值兩邊加上雙引號 ["] 括起來,同時,將字段值內的一個雙引號 ["] 替換為兩個雙引號 [""],例如: [下棋,"飛"] 在 CSV 文件中被表現為 ["下棋,""飛"""]。

        處理要求:

        讀入文件 cvs.txt,根據上述 csv 文件的規則進行解析,重新格式化字段生成輸出文件 output.txt

        第一列轉為整形(int)

        第二列為字符串型

        第三列為字符串型

        第四列轉為浮點數(float)

        第五列轉為日期類型(DateTime)

        ?

        輸出文件的字段以制表符 [TAB] 來分割字段,

        字符串字段輸出時用單引號[']括起來

        日期字段顯示成 YYYY/MM/DD 的格式

        ?

        說明:

        1、可以假設字段值只包含單行數據,即字段值本身不含有 [回車換行]

        2、不能對文件 csv.txt 作任何修改

        ?

        編程要求:

        ?

        使用任何你熟悉的編程語言編寫,時間為 1.5 小時。

        題目意思:

        這個題目意思描述的不是很清楚,就是給你一個格式化后的csv文件,重新還原到剛開始的文件

        還有就是,字段值中同時有 [,] 和?["] 只會在最外層加一次["]

        思路:

        1. 主要難點在于第二列和第三列如何區分開,因為第二列和第三列都是字符串

        2. 區分的思路為,遍歷所有[,],如果[,]左邊["]的個數和右邊["]的個數都為偶數,則這個[,]為分隔第二個字符串和
        第三個字符串的分界點

        3. 找到分界點后,格式化輸出即可

        代碼:

        package com.st.solution.main;
        
        import com.st.solution.util.DateTimeUtil;
        
        import java.io.*;
        import java.util.ArrayList;
        import java.util.List;
        
        /**
         * @Author: lilimin
         * @Date: 2019/6/28 20:09
         */
        public class Solution {
        
         public static void main(String[] args) {
        
         String readFileName = "src/main/resources/csv.txt";
         String writeFileName = "src/main/resources/output.txt";
         readAndWriteFile(readFileName, writeFileName);
         }
        
         /**
         * 讀入文件,格式化
        輸出 * @param readFileName * @param writeFileName */ public static void readAndWriteFile(String readFileName, String writeFileName) { BufferedReader reader = null; BufferedWriter writer = null; try { reader = new BufferedReader(new FileReader(new File(readFileName))); writer = new BufferedWriter(new FileWriter(new File(writeFileName))); String line = null; while ((line = reader.readLine()) != null) { String formatText = formatText(line); writer.write(formatText); } } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 格式化每一行數據的輸出 * @param text * @return */ public static String formatText(String text) { // 如果字段值不含有 [,] 和 ["] ,直接解析輸出。 if (!text.contains(",") && !text.contains("\"")) { return text; } String[] splitTextArray = text.split(","); int arrayLength = splitTextArray.length; List<String> tempList = new ArrayList<String>(); tempList.add(splitTextArray[0]); // 如果split后的數組長度為4,說明字符中間沒有, if (arrayLength == 4) { tempList.add(formatStrText(splitTextArray[1])); tempList.add(formatStrText(splitTextArray[2])); } else { // 第2列 或者 第3列 字符中間有, // 獲取第二列和第三列合起來的字符串 StringBuilder middleText = new StringBuilder(); for (int i = 1; i <arrayLength - 3 ; i++) { middleText.append(splitTextArray[i]).append(","); } middleText.append(splitTextArray[arrayLength- 3]); // 獲取第二列和第三列格式化后的字符串 List<String> middleTextList = formatMiddleText(middleText.toString()); tempList.addAll(middleTextList); } tempList.add(splitTextArray[arrayLength - 2]); tempList.add(DateTimeUtil.transferDateformat(splitTextArray[arrayLength - 1])); return String.join(" ", tempList) + "\n"; } /** * 格式化string類型的字符串 * @param text * @return */ public static String formatStrText(String text) { if (text.startsWith("\"") && text.endsWith("\"")) { text = text.substring(1, text.length() - 1); } text = text.replaceAll("\"\"", "\""); return "'" + text + "'"; } /** * 找出第二列和第三列的分界點[,],并且格式化第二列和第三列 * 原則如下,遍歷所有[,],如果某個[,] 左邊的["]個數和右邊的["]個數都為偶數 * 則一定是第二三列的分界點 * @param text * @return */ public static List<String> formatMiddleText(String text) { List<String> list = new ArrayList<String>(); String tempText = text; int index = -1; while ((index = tempText.indexOf(",", index + 1)) != -1) { int leftSum = 0; int rightSum = 0; for (int i = 0; i < index; i++) { if (text.charAt(i) == '"') { leftSum++; } } for (int i = index + 1; i < text.length(); i++) { if (text.charAt(i) == '"') { rightSum++; } } if ((leftSum & 1) == 0 && (rightSum & 1) == 0) { break; } } list.add(formatStrText(text.substring(0, index))); list.add(formatStrText(text.substring(index + 1))); return list; } }
        /**
         * @Author: lilimin
         * @Date: 2019/6/28 20:09
         */
        public class DateTimeUtil {
        
        
         /**
         * 將 yyyy-MM-dd 格式的日期字符串轉為 yyyy/MM/dd 格式的日期字符串
         * @param timestr
         * @return
         */
         public static String transferDateformat(String timestr) {
         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
         SimpleDateFormat sdf2 = new SimpleDateFormat("YYYY/MM/DD");
         Date parse = null;
         try {
         parse = sdf1.parse(timestr);
         } catch (ParseException e) {
         e.printStackTrace();
         }
         return sdf2.format(parse);
         }
        }

        我代碼最后的output.txt的內容為

        1 'Jane' '下"棋,"飛"' 56.2 1976/08/236
        2 'Kate' '購物' 49.6 1980/01/25
        3 'Jerry' '羽毛球,爬山' 55.6 1980/05/147

        作為一個完整的工程,單測必不可少

        
        /**
         * @Author: lilimin
         * @Date: 2019/6/29 16:14
         */
        public class SolutionTest {
        
         @Test
         public void readAndWriteFile() {
         String readFileName = "src/main/resources/test1csv.txt";
         String writeFileName = "src/main/resources/test1output.txt";
        
         Solution.readAndWriteFile(readFileName, writeFileName);
        
         readFileName = "src/main/resources/test2csv.txt";
         writeFileName = "src/main/resources/test2output.txt";
        
         Solution.readAndWriteFile(readFileName, writeFileName);
         }
        
         @Test
         public void formatStrText() {
         String text = Solution.formatStrText("\"\"\"text\"\"\"");
         assertEquals("'\"text\"'", text);
         }
        
         @Test
         public void formatMiddleText() {
         List<String> textList = Solution.formatMiddleText("str1,str2");
         assertEquals("'str1'", textList.get(0));
         assertEquals("'str2'", textList.get(1));
        
         textList = Solution.formatMiddleText("\"str1\",\"str2\"");
         assertEquals("'str1'", textList.get(0));
         assertEquals("'str2'", textList.get(1));
        
         textList = Solution.formatMiddleText("\"\"\"str1\",\"str2\"");
         assertEquals("'\"str1'", textList.get(0));
         assertEquals("'str2'", textList.get(1));
         }
        }

        單測的輸入和輸出如下

        test1.csv

        2,",Kate",購物,49.6,1979-12-56
        3,Jerry,"羽毛球,爬山",55.6,1980-5-26

        test1output.txt

        2 ',Kate' '購物' 49.6 1980/01/25
        3 'Jerry' '羽毛球,爬山' 55.6 1980/05/147

        test2.csv

        1,Jane,"下""棋,""飛""",56.2,1976-8-23
        2,"Kate,Kate","購物,購物",49.6,1979-12-56
        3,Jerry,"羽毛球,爬山",55.6,1980-5-26

        test2output.txt

        1 'Jane' '下"棋,"飛"' 56.2 1976/08/236
        2 'Kate,Kate' '購物,購物' 49.6 1980/01/25
        3 'Jerry' '羽毛球,爬山' 55.6 1980/05/147
        

        推薦

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        北京車和家java開發工程師面試題總結

        北京車和家java開發工程師面試題總結: 版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。 題目描述: 筆試題: CSV 文件處理 給定一個 CSV 文件,其內容的展現規則如下: - 每一行數據包含多個字段,字段間以 [,] 分割。 - 如果字段值不
        推薦度:
        標簽: 面試 北京 汽車
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产欧美国产综合一区 | 成人免费网站视频www| 国产成人精品免费午夜app| 亚洲国产成人久久精品影视| 成人区精品一区二区不卡亚洲| 国产99视频精品免费视频76| 国产a v无码专区亚洲av| 国产精品免费αv视频| 亚洲狠狠婷婷综合久久久久| 午夜精品免费在线观看| 亚洲国产日韩在线观频| 一级毛片免费全部播放| 亚洲午夜福利在线观看| 久久久精品免费视频| 亚洲综合成人网在线观看| 91嫩草免费国产永久入口| 亚洲一区二区三区自拍公司| 免费看一区二区三区四区| 亚洲第一精品在线视频| 免费看国产成年无码AV片| 亚洲AV日韩AV一区二区三曲 | 久久精品国产这里是免费| 97se亚洲综合在线| 成人免费视频软件网站| 国产精品亚洲一区二区三区在线观看| 在线美女免费观看网站h| 亚洲精品综合在线影院| 亚洲国产人成中文幕一级二级| 亚洲AV无码国产精品永久一区| 国产成人精品免费视频网页大全| 亚洲va国产va天堂va久久| 少妇高潮太爽了在线观看免费| 久久精品国产亚洲AV香蕉| 久久国产乱子精品免费女| 亚洲色大成网站WWW久久九九| 日韩在线观看免费完整版视频| 国产老女人精品免费视频| 中国一级全黄的免费观看| 亚洲高清有码中文字| 中文字幕人成人乱码亚洲电影 | 特黄特色的大片观看免费视频|