国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
主站蜘蛛池模板: 国产特级全黄一级毛片不卡 | 国产国拍亚洲精品永久不卡 | 国产成人久久精品二区三区牛 | 久久久国产这里有的是精品 | 国产成人精品日本亚洲网址 | 国产丝袜一区二区三区在线观看 | 亚洲欧美a| 广州一级毛片 | 一区二区视频在线 | 欧美亚洲国产精品久久久 | 一级毛片免费 | 国产第7页| 国产区在线观看 | 亚洲午夜久久久久久91 | 日韩精品a在线视频 | 国产成人a一区二区 | 国产中文在线观看 | 亚洲图片国产日韩欧美 | 欧美精品国产日韩综合在线 | 亚洲欧美二区三区久本道 | 欧美第一页在线观看 | 欧美精品一区二区在线观看 | 亚洲欧美专区 | 99久久精品国产一区二区小说 | 日韩第四页 | 欧美日韩国产另类一区二区三区 | 可以看的毛片 | 欧美 日韩 国产在线 | 亚洲一区二区在线免费观看 | 欧美日本日韩aⅴ在线视频 欧美日韩91 | 国产在线精品一区二区三区不卡 | 伊人黄| 久久一区二区精品综合 | 国产亚洲视频在线 | 一久久| 免费一区二区视频 | 国产成人免费高清激情明星 | 性夜影院爽黄a爽免费看网站 | 日韩欧美一二区 | 亚洲欧洲国产成人综合一本 | 最新国产在线视频 |