如何使用java读取xml,csv?如何标记等?麦克斯韦[关闭]

lndjwyie  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(112)

**已关闭。**此问题需要debugging details。目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
2小时前关闭
Improve this question
如何在java中使用BufferedReader读取csv文件。行表示每一行,br.readLine()表示读取每一行或跳过第一行。当有一行时,我们只需读取每一行,每个值用“;"分隔,我们可以得到一个数组列表来包含每行中的每个值。然后我们使用一个person类来包含这些值。

wn9m85ua

wn9m85ua1#

树的前序、中序和后序。

  1. public List<Node> preorder() {
  2. List<Node> list = new ArrayList<>();
  3. preOrderHelper(this.root, list);
  4. return list;
  5. }
  6. // In-Order traversal
  7. // Left Subtree . Node . Right Subtree
  8. public List<Node> inorder() {
  9. List<Node> list = new ArrayList<>();
  10. inOrderHelper(this.root, list);
  11. return list;
  12. }
  13. // Post-Order traversal
  14. // Left Subtree . Right Subtree . Node
  15. public List<Node> postorder() {
  16. List<Node> list = new ArrayList<>();
  17. postOrderHelper(this.root, list);
  18. return list;
  19. }
  20. private void preOrderHelper(Node node, List<Node> list) {
  21. if (node != null && node.key != null) {
  22. list.add(node);
  23. preOrderHelper(node.left, list);
  24. preOrderHelper(node.right, list);
  25. }
  26. }
  27. private void inOrderHelper(Node node, List<Node> list) {
  28. if (node != null && node.key != null) {
  29. inOrderHelper(node.left, list);
  30. list.add(node);
  31. inOrderHelper(node.right, list);
  32. }
  33. }
  34. private void postOrderHelper(Node node, List<Node> list) {
  35. if (node != null && node.key != null) {
  36. postOrderHelper(node.left, list);
  37. postOrderHelper(node.right, list);
  38. list.add(node);
  39. }
  40. }

字符集
The steps of reading,loading and inserting XML

  1. public class XMLTable {
  2. /**
  3. * Save all records to the XML file
  4. */
  5. public void save(String tableName, List<Customer> customers) {
  6. File f = new File(FileUtil.getTableFileName(tableName));
  7. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  8. try {
  9. // make the xml tree
  10. // use factory to get the instance of document builder
  11. DocumentBuilder db = dbf.newDocumentBuilder();
  12. Document doc = db.newDocument();
  13. // Root element <customers>
  14. Element rootElem = doc.createElement(Customer.KEY_ROOT);
  15. doc.appendChild(rootElem);
  16. for (Customer customer : customers) {
  17. Element customerElem = doc.createElement(Customer.KEY_ELEMENT);
  18. rootElem.appendChild(customerElem);
  19. // child element <ID> under <customer>
  20. Element cid = doc.createElement(Customer.KEY_ID);
  21. cid.appendChild(doc.createTextNode(Integer.toString(customer.getId())));
  22. customerElem.appendChild(cid);
  23. if (customer.getName() != null) {
  24. Element name = doc.createElement(Customer.KEY_NAME);
  25. name.appendChild(doc.createTextNode(customer.getName()));
  26. customerElem.appendChild(name);
  27. }
  28. if (customer.getAddress() != null) {
  29. Element address = doc.createElement(Customer.KEY_ADDRESS);
  30. address.appendChild(doc.createTextNode(customer.getAddress()));
  31. customerElem.appendChild(address);
  32. }
  33. if (customer.getCity() != null) {
  34. Element city = doc.createElement(Customer.KEY_CITY);
  35. city.appendChild(doc.createTextNode(customer.getCity()));
  36. customerElem.appendChild(city);
  37. }
  38. if (customer.getPostCode() != null) {
  39. Element postCode = doc.createElement(Customer.KEY_POSTCODE);
  40. postCode.appendChild(doc.createTextNode(customer.getPostCode()));
  41. customerElem.appendChild(postCode);
  42. }
  43. if (customer.getCountry() != null) {
  44. Element country = doc.createElement(Customer.KEY_COUNTRY);
  45. country.appendChild(doc.createTextNode(customer.getCountry()));
  46. customerElem.appendChild(country);
  47. }
  48. }
  49. // save the xml file
  50. // Transformer is for process XML from a variety of sources and write the
  51. // transformation
  52. // output to a variety of sinks
  53. Transformer transformer = TransformerFactory.newInstance().newTransformer();
  54. // set xml encoding to utf-8
  55. transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
  56. // pretty print
  57. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  58. DOMSource source = new DOMSource(doc);
  59. StreamResult result = new StreamResult(f);
  60. transformer.transform(source, result);
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. }
  64. }
  65. /**
  66. * Get all records from the XML file
  67. */
  68. public List<Customer> load(String tableName) {
  69. List<Customer> customers = new ArrayList<>();
  70. File f = new File(FileUtil.getTableFileName(tableName));
  71. if (!f.exists()) {
  72. return customers;
  73. }
  74. // TODO: Complete this method
  75. // START YOUR CODE
  76. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  77. try {
  78. // Parse the XML file
  79. DocumentBuilder db = dbf.newDocumentBuilder();
  80. Document doc = db.parse(f);
  81. doc.getDocumentElement().normalize(); // Optional, but recommended
  82. // Get a NodeList of <customer> elements
  83. NodeList nodeList = doc.getElementsByTagName(Customer.KEY_ELEMENT);
  84. for (int i = 0; i < nodeList.getLength(); i++) {
  85. Node node = nodeList.item(i);
  86. if (node.getNodeType() == Node.ELEMENT_NODE) {
  87. Element elem = (Element) node;
  88. Customer customer = new Customer();
  89. // Assuming the ID is always present and is an integer
  90. customer.setId(Integer.parseInt(elem.getElementsByTagName(Customer.KEY_ID).item(0).getTextContent()));
  91. // Check and set Name if it is present
  92. if (elem.getElementsByTagName(Customer.KEY_NAME).getLength() > 0) {
  93. customer.setName(elem.getElementsByTagName(Customer.KEY_NAME).item(0).getTextContent());
  94. }
  95. // Check and set Address if it is present
  96. if (elem.getElementsByTagName(Customer.KEY_ADDRESS).getLength() > 0) {
  97. customer.setAddress(elem.getElementsByTagName(Customer.KEY_ADDRESS).item(0).getTextContent());
  98. }
  99. // Check and set City if it is present
  100. if (elem.getElementsByTagName(Customer.KEY_CITY).getLength() > 0) {
  101. customer.setCity(elem.getElementsByTagName(Customer.KEY_CITY).item(0).getTextContent());
  102. }
  103. // Check and set Postcode if it is present
  104. if (elem.getElementsByTagName(Customer.KEY_POSTCODE).getLength() > 0) {
  105. customer.setPostCode(elem.getElementsByTagName(Customer.KEY_POSTCODE).item(0).getTextContent());
  106. }
  107. // Check and set Country if it is present
  108. if (elem.getElementsByTagName(Customer.KEY_COUNTRY).getLength() > 0) {
  109. customer.setCountry(elem.getElementsByTagName(Customer.KEY_COUNTRY).item(0).getTextContent());
  110. }
  111. // Add the customer to the list
  112. customers.add(customer);
  113. }
  114. }
  115. } catch (Exception e) {
  116. e.printStackTrace();
  117. }
  118. // END YOUR CODE
  119. return customers;
  120. }
  121. /**
  122. * Insert a new customer to XML files.
  123. *
  124. *
  125. */
  126. public void insert(String tableName, Customer customer) {
  127. // TODO: Complete this method
  128. // START YOU CODE
  129. // HINT: insert the given customer to the XML file.
  130. // You can call the load() and save() methods
  131. List<Customer> customers = load(tableName);
  132. customers.add(customer);
  133. save(tableName, customers);
  134. // END YOUR CODE
  135. }
  136. }


The following steps are used:

  1. public List<Person> readCsv(String fileName) {
  2. List<Person> list = new LinkedList<>();
  3. // ########## YOUR CODE STARTS HERE ##########
  4. String line;
  5. try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
  6. br.readLine(); // skip the first line
  7. while ((line = br.readLine()) != null) {
  8. Person person = new Person(null,null,null,null);
  9. String[] values = line.split(";");
  10. for (int i = 0;i< values.length;i++) {
  11. switch (i){
  12. case 0->{person.setId(Integer.parseInt(values[i]));}
  13. case 1->{person.setName(values[i]);}
  14. case 2->{person.setAge(Integer.parseInt(values[i]));}
  15. case 3->{person.setOccupation(values[i]);}
  16. }
  17. }
  18. list.add(person);
  19. }
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }


tokeniser

  1. public void next() {
  2. buffer = buffer.trim(); // remove whitespace
  3. if(buffer.isEmpty()) {
  4. currentToken = null; // if there's no string left, set currentToken null and return
  5. return;
  6. }
  7. // ########## YOUR CODE STARTS HERE ##########
  8. StringBuilder token = new StringBuilder();
  9. for (int i = 0;i<buffer.length();i++){
  10. char currentChar = buffer.charAt(i);
  11. if (Character.isDigit(currentChar) || Character.isLetter(currentChar)){
  12. token.append(currentChar);
  13. }else if (Character.isWhitespace(currentChar)){
  14. break;
  15. }else if(currentChar == '.'){
  16. if (token.isEmpty()){
  17. token.append(".");
  18. break;
  19. }else {
  20. break;
  21. }
  22. }else {
  23. token.append(currentChar);
  24. break;
  25. }
  26. }
  27. String tokenString = token.toString();
  28. if (isWord(tokenString)){
  29. if (tokenString.equals(tokenString.toLowerCase())){
  30. currentToken = new Token(tokenString, Token.Type.LOWER_CASE_WORD);
  31. }else if (tokenString.equals(tokenString.toUpperCase())) {
  32. currentToken = new Token(tokenString, Token.Type.UPPER_CASE_WORD);
  33. }else {
  34. if (tokenString.length()<=3){
  35. currentToken = new Token(tokenString,Token.Type.SHORT_CAMEL_CASE_WORD);
  36. }else {
  37. currentToken = new Token(tokenString,Token.Type.LONG_CAMEL_CASE_WORD);
  38. }
  39. }
  40. }else if (isDigit(tokenString)){
  41. currentToken = new Token(tokenString, Token.Type.INTEGER_NUMBER);
  42. }else {
  43. currentToken = new Token(tokenString,Token.Type.NON_ALPHANUMERIC);
  44. }
  45. // ########## YOUR CODE ENDS HERE ##########
  46. // Remove the extracted token from buffer
  47. int tokenLen = currentToken.getValue().length();
  48. buffer = buffer.substring(tokenLen);
  49. }


parser的步骤

  1. public void parseExp() {
  2. // TODO: Complete this method
  3. // START YOUR CODE
  4. Customer customer = new Customer();
  5. String attributesString;
  6. String[] attributesArray = new String[0];
  7. String[] values = new String[0];
  8. try{
  9. for(int i = 0;i<2;i++){
  10. if (i == 0){
  11. Token currentToken = tokeniser.takeNext();
  12. String value = currentToken.value;
  13. int position_left = 0;
  14. for (int j = 0;j<value.length()-1;j++){
  15. if (value.charAt(j) == '('){
  16. position_left = j;
  17. }
  18. }
  19. attributesString = value.substring(position_left+1,value.length()-1);
  20. attributesArray = attributesString.split(",");
  21. }
  22. if (i == 1){
  23. Token currentToken = tokeniser.takeNext();
  24. String value = currentToken.value;
  25. value = value.substring(1,value.length()-1);
  26. values = value.split(", ");
  27. for (int n=0;n< values.length;n++){
  28. if (n !=0){
  29. values[n] = values[n].substring(1,values[n].length()-1);
  30. }
  31. }
  32. }
  33. }
  34. for (int m = 0;m< values.length;m++){
  35. setCustomerProperty(customer,attributesArray[m],values[m]);
  36. }
  37. table.insert(Customer.TABLE_NAME,customer);
  38. }catch (Exception e){
  39. }
  40. // END YOUR CODE
  41. }

展开查看全部

相关问题